Контейнеры Docker с одинаковым изображением не работают должным образом - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть docker-compose.yml, настроенный так:

app:
    build:
      dockerfile: ./docker/app/Dockerfile.dev
    image: test/test:${ENV}-test-app
    ...

Dockerfile, вызываемый здесь, имеет следующую строку:

...
RUN ln -s ../overrides/${ENV}/plugins ../plugins
...

И есть также скрипт, который явыполняется для запуска всей среды (это зависит от нескольких контейнеров, поэтому я попытался опустить ненужную информацию).

Это скрипт bash, выполняющий следующее:

ENV=$1 docker-compose -p $1 up -d --force-recreate --build app

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

sh initializer.sh foo -> creates foo-test-app container
sh initializer.sh bar -> creates bar-test-app container

Теперь у меня проблема в том, что даже когда у меня флаг --force-recreate присутствует двафактически созданные изображения рассматриваются как одно и то же изображение с двумя разными тегами.

И когда я проверяю контейнеры, это происходит из-за того, что оба контейнера имеют символическую ссылку на:

overrides/foo/plugins

Когда я создаю новый контейнер, чтобы повторить это, он не замечаетчасть.Как я могу это исправить?

Кроме того, если я переключаюсь на один контейнер и меняю символическую ссылку, он автоматически изменяется и в другом контейнере.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Я нашел ответ в флаге проекта при создании моих контейнеров.Вот что я сделал:

docker-compose -p foo up -d
docker-compose -p bar up -d

Это приведет к тому, что контейнеры будут объединены в 2 отдельных проекта.

Ссылка на документацию

0 голосов
/ 19 ноября 2018

$ ENV в вашем файле Docker не совпадает с файлом в вашем файле компоновки.

Когда вы запускаете docker-compose up, его можно приблизительно увидеть как docker build, за которым следует docker run.Таким образом, Docker создает изображение слой за слоем, на этом этапе env не называется ENV.Только в docker run будет использоваться $ ENV.

Переменные окружения на этапе сборки могут использоваться, хотя они передаются через ARG

// compose.yml
build:
  context: frontend
  args:
  - BUILD_ENV=${BUILD_ENV}

// dockerfile
ARG BUILD_ENV
RUN ./node_modules/.bin/ng build --$BUILD_ENV

Это можно сделать, чтобы решитьпроблема, однако, это создаст одно изображение для проекта, который вы можете не захотеть.Или вы можете сделать это в сценарии точки входа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...