Общий контейнер Docker в нескольких проектах создания докеров - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть docker-compose.yml, который запускает 2 службы (я исключил все несущественные данные из него).

  app:
    build:
      context: .
      dockerfile: ./docker/app/Dockerfile
    image: ...
    container_name: app-${ENV}
    depends_on:
      - db
    expose:
      - 80

  db:
    image: ...
    container_name: my-cool-db
    ports:
      - "3306:3306"

Смысл здесь в том, что app получает имя контейнера в зависимости от параметра.В общем, у меня есть сценарий оболочки, выполняющий следующее:

ENV=$1 docker-compose -p $1 up -d

Короче говоря, что бы я ни указывал в качестве параметра, новый контейнер приложения должен быть вызван.Например, если я сделаю sh initializer.sh first, я получу app-first контейнер.* Указан параметр -p, поэтому я могу иметь несколько экземпляров одного и того же контейнера, классифицируемых как другой проект.

Если у меня один контейнер, это прекрасно работает, и в итоге я говорю:

app-first
app-second
app-third

Я бы хотел, чтобы все контейнеры использовали одну и ту же БД.Но когда я делаю docker-compose, мой контейнер БД все еще хочет быть вызванным независимо от его существования.

Является ли проблемой то, что он пытается создать БД под другим именем проекта, но с тем же именем контейнера, что вызывает коллизию?

Можно ли это сделать, не вызывая 2 отдельных контейнера БД

1 Ответ

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

Хакерское решение:

измените свой файл композиции на

services:
  app:
    image: ...
    container_name: app-${ENV}
    networks:
    - shared
    expose:
    - 80

  db:
    image: ...
    container_name: my-cool-db
    networks:
    - shared
    ports:
    - "3306:3306"

networks:
  shared:
    external: true

Затем сначала создайте сеть docker network create shared

Подними дБ: docker-compose up -d db

Первое приложение: ENV=first docker-compose -p first up -d app

Второе приложение: ENV=second docker-compose -p second up -d app

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