Docker-Compose:如何依赖另一个网络上的容器?即使网络已链接,我仍收到一条错误消息,提示容器“未定义”

Rah*_*hul 10 docker dockerfile docker-compose docker-network

我在 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
Run Code Online (Sandbox Code Playgroud)

服务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

Run Code Online (Sandbox Code Playgroud)

我有一个 shell 脚本,可以转到这 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
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,我已经使用网桥创建了网络之间的链接。

当我docker network inspect {network id}可以看到容器wordpress并且都frontend在网络中时。但是,当使用该命令创建第二个容器时depends_on,出现以下错误。

ERROR: Service 'frontend' depends on service 'wordpress' which is undefined.

鉴于它们位于同一网络中,我不确定这是为什么。

我将不胜感激任何帮助。谢谢!

Car*_*los 12

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
Run Code Online (Sandbox Code Playgroud)


Gre*_*ich 7

我认为你在那里误解了。

depends_on:仅适用于 docker-compose 文件,并且仅说明启动和停止容器的顺序。

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