#docker #docker-compose #dockerfile #docker-networking
#docker #docker-compose #dockerfile #docker-networking
Вопрос:
У меня есть 2 разных сервиса в 2 разных файлах docker-compose.yml в 2 разных местах.
Сервис 1: wordpress
version: "3.7"
services:
# WordPress
wordpress:
depends_on:
- db
container_name: wordpress
image: wordpress:latest
ports:
- '8000:80'
restart: unless-stopped
volumes: ['./:/var/www/html']
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
networks:
- wpsite
networks:
wpsite:
driver: bridge
Сервис 2: интерфейс
version: "3.7"
services:
frontend:
depends_on:
- wordpress
container_name: frontend
restart: unless-stopped
stdin_open: true
build:
context: ../realm-frontend
volumes:
- static:/realm-frontend/build
networks:
- cms_wpsite
networks:
cms_wpsite:
external: true
У меня есть сценарий оболочки, который отправляется в 2 местоположения и запускает файлы docker-compose для создания контейнеров.
Скрипт
cd ~/cms;
docker-compose -f docker-compose.yml up -d --build --force-recreate
cd ../frontend;
docker-compose -f docker-compose.yml up -d --build --force-recreate
Как вы можете видеть, я создал связь между сетями с помощью моста.
Когда docker network inspect {network id}
я вижу оба контейнера wordpress
и frontend
нахожусь в сети. Однако, когда второй контейнер создается с depends_on
помощью команды, я получаю следующую ошибку.
ERROR: Service 'frontend' depends on service 'wordpress' which is undefined.
Я не уверен, почему это так, учитывая, что они находятся в одной сети.
Я был бы признателен за любую помощь. Спасибо!
Ответ №1:
Depends_on работает только с сервисами в одном и том же файле компоновки, поэтому, чтобы делать то, что вы хотите, вам нужно будет использовать что-то вроде wait-for-it.sh . Посмотрите здесь для получения дополнительной информации: https://docs.docker.com/compose/startup-order /
Что-то подобное может сработать для вас, или вы также можете создать пользовательский сценарий ожидания:
services:
frontend:
container_name: frontend
restart: unless-stopped
stdin_open: true
build:
context: ../realm-frontend
volumes:
- static:/realm-frontend/build
command: ["./wait-for-it.sh", "wordpress:80", "--", "yourfrontendcmd"]
networks:
- cms_wpsite
Ответ №2:
Я думаю, вы неправильно поняли.
depends_on: работает только в файле docker-compose и только указывает, в каком порядке запускать и останавливать контейнер.