Docker-Compose:如何 depends_on 另一个网络上的容器?即使网络已链接,我也会收到一条错误消息,指出容器 'undefined'
Docker-Compose: How to depends_on a container on another network? I am getting an error saying container 'undefined' even though networks are linked
我在 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
我有一个 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
如您所见,我已经使用网桥在网络之间创建了link。
当我 docker network inspect {network id}
时,我可以看到容器 wordpress
和 frontend
都在网络中。但是,当使用 depends_on
命令创建第二个容器时,出现以下错误。
ERROR: Service 'frontend' depends on service 'wordpress' which is undefined.
我不确定这是为什么,因为它们在同一个网络中。
如果有任何帮助,我将不胜感激。谢谢!
我想你误会了。
depends_on: 仅适用于 docker-compose 文件,并且仅说明启动和停止容器的顺序。
Depends_on 仅适用于同一组合文件中的服务,因此要执行您想要的操作,您需要使用类似 wait-for-it.sh 的内容。在这里查看更多信息:https://docs.docker.com/compose/startup-order/
类似的方法可能适合您,或者您也可以创建自定义 wait-for-it 脚本:
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 个不同位置的 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
我有一个 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
如您所见,我已经使用网桥在网络之间创建了link。
当我 docker network inspect {network id}
时,我可以看到容器 wordpress
和 frontend
都在网络中。但是,当使用 depends_on
命令创建第二个容器时,出现以下错误。
ERROR: Service 'frontend' depends on service 'wordpress' which is undefined.
我不确定这是为什么,因为它们在同一个网络中。
如果有任何帮助,我将不胜感激。谢谢!
我想你误会了。
depends_on: 仅适用于 docker-compose 文件,并且仅说明启动和停止容器的顺序。
Depends_on 仅适用于同一组合文件中的服务,因此要执行您想要的操作,您需要使用类似 wait-for-it.sh 的内容。在这里查看更多信息:https://docs.docker.com/compose/startup-order/
类似的方法可能适合您,或者您也可以创建自定义 wait-for-it 脚本:
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