Являются ли переменные среды докера общими для контейнеров? - PullRequest
0 голосов
/ 25 июня 2018

Новичок здесь.Я создал пустое решение, добавил WebApplication1 и WebApplication2.Затем я добавил поддержку докеров (Docker для Windows, контейнеры Windows).Compose файл выглядит следующим образом:

version: '3.4'

services:
  webapplication1:
    image: compositeapp
    build:
      context: .\WebApplication1
      dockerfile: Dockerfile

  webapplication2:
    image: compositeapp
    build:
      context: .\WebApplication2
      dockerfile: Dockerfile

Таким образом, оба контейнера находятся в одном изображении.Dockerfile для Webapplication1 имеет ENV LICENSE = abc123, а для dockerfile для webapplication2 - ENV LICENSE = abc456.

После сборки и запуска контейнеров я использовал exec -it powershell для удаленного доступа к 2 контейнерам и получил get-item env: license.Оба контейнера вернули 456.

Будучи новичком, я ожидал, что одна машина вернет abc123, а другую - abc456.Я просто назвал имя среды лицензией, но что делать, если им нужна переменная среды для каждого контейнера?

1 Ответ

0 голосов
/ 26 июня 2018

Я полагаю, что проблема, о которой вы заметили, связана с тем, что вы указали одно и то же имя изображения для обеих служб, что подразумевает, что они будут иметь одинаковую переменную ENV, как определено в последней скомпилированной Dockerfile.

Не могли бы вы попробовать это вместо этого?

version: '3.4'

services:
  webapplication1:
    image: <b>compositeapp1</b>
    build:
      context: .\WebApplication1
      dockerfile: Dockerfile

  webapplication2:
    image: <b>compositeapp2</b>
    build:
      context: .\WebApplication2
      dockerfile: Dockerfile

В любом случае, даже если это работает, я предполагаю, что ваши два Dockerfile почти одинаковы (?), И в этом случае я бы предпочел использоватьодин Dockerfile и один тег изображения, но можно настроить среду обоих сервисов, используя некоторый раздел environment в вашем docker-compose.yml (или некоторый env_file раздел вместе с некоторым внешним .env files ...).

Например, вы можете написать что-то вроде этого:

version: '3.4'

services:
  webapplication1:
    image: compositeapp
    build:
      context: .\WebApplication
      dockerfile: Dockerfile
    environment:
      <b>- LICENSE=abc123</b>
  webapplication2:
    image: compositeapp
    environment:
      <b>- LICENSE=abc456</b>

(не забывая удалить строку ENV LICENSE=... из Dockerfile)

...