Интер докер-композитор связи по сети - PullRequest
0 голосов
/ 25 мая 2018

У меня есть файл docker-compose, содержащий одну базу данных и множество веб-приложений.

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

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

Например,

БД и веб-приложение в одном и том же docker-compose, что прекрасно работает.

docker-compose-adminer-with-db.yml version: '2' services : db: image: postgres:10-alpine ports: - "5432:5432" environment: POSTGRES_USER: user1 POSTGRES_PASSWORD: changeme POSTGRES_DB: tododb admin: image: adminer restart: always depends_on: - db ports: - 8080:8080

Что бы я хотел

Docker-compose для db

docker-compose-db.yml version: '2' services : db: image: postgres:10-alpine ports:<br/> - "5432:5432" environment: POSTGRES_USER: user1 POSTGRES_PASSWORD: changeme POSTGRES_DB: tododb

Docker-compose для веб-приложений

docker-compose-adminer.yml version: '2' services : admin: image: adminer restart: always depends_on: - db ports: - 8080:8080 networks: - composeforani_default

$ docker-compose -f docker-compose-db.yml up -d Creating network "myapp_default" with the default driver Creating myapp_db_1 ... done</p> <p>$ docker network list NETWORK ID NAME DRIVER SCOPE 4eb66db9e09e bridge bridge local 8290604a966b host host local 1752afa36757 myapp_default bridge local d14d3369531c none null local</p> <p>$ docker-compose -f docker-compose-adminer.yml up -d <strong>ERROR: Service 'admin' depends on service 'db' which is undefined.</strong>

1 Ответ

0 голосов
/ 26 мая 2018

disabled_on не гарантирует, что другой сервис завершит процесс запуска, он просто запускает приложение в заказах.Чтобы смягчить вашу проблему, вы можете использовать настраиваемое ожидание в своих сценариях оболочки, чтобы проверить, работает ли ваша БД.

Используйте этот код в Dockerfile:

ENV DOCKERIZE_VERSION v0.6.0
RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
&& rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz

и используйте этот код в своемсценарий оболочки изображения администратора, чтобы проверить, работает ли db и продолжить:

dockerize -wait http://$db_host:$db_port -timeout 300s

Для получения дополнительной информации посетите эту ссылку

...