Docker-Compose: как зависимый_контейнер в другой сети? Я получаю сообщение об ошибке с указанием контейнера ‘undefined’, даже если сети связаны

#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 и только указывает, в каком порядке запускать и останавливать контейнер.

https://docs.docker.com/compose/compose-file/#depends_on