我正在尝试为名为“ mysql”的外部 MySQL容器添加depends_on
(我不想为此堆栈创建新的mysql容器;我想使用现有容器)。
到目前为止,我的代码如下:
version: '2'
services:
wordpress:
image: wordpress:latest
hostname: mia
restart: unless-stopped
ports:
- 80
environment:
WORDPRESS_DB_HOST: mysql:3306
WORDPRESS_DB_USER: "mia"
WORDPRESS_DB_PASSWORD: "12345"
WORDPRESS_DB_NAME: "mia"
volumes:
- /f/Sites/mia:/var/www/html
depends_on:
- mysql
networks:
- occms
- ocdb
mysql:
name: mysql
networks:
occms:
external:
name: cms
ocdb:
external:
name: db
似乎找不到任何好的信息吗?
答案 0 :(得分:2)
depends_on
指令仅适用于同一组合项目中的服务。如果将这些文件合并到同一个项目中,它们可能位于不同的文件中,例如
docker-compose -f compose-app.yaml -f compose-db.yaml up
否则,我建议将启动依赖项从 compose 移到应用程序的入口点中。一个常见的例子是 wait-for-it.sh,它允许你有一个入口点脚本:
#!/bin/sh
# delay for mysql startup using wait-for-it for up to 5 minutes
wait-for-it.sh -h mysql -p 3306 -t 300
# call the original wordpress entrypoint script with any args
exec docker-entrypoint.sh "$@"
答案 1 :(得分:0)
听起来您想通过另一个 Compose 堆栈来管理 MySQL 容器。
所以选项一:检查外部链接是否适合您: Docker-compose external_links not able to connect
另一种选择是通过主机网络堆栈连接它:
在当前堆栈中,你需要改变这部分
WORDPRESS_DB_HOST: mysql:3306
作为概念证明,将 mysql
替换为 MySQL 容器的 IP 地址并删除所有depends_on。
另一方面,您应该确保在启动 MySQL 容器时,容器端口链接到主机端口。所以两者通过主机堆栈进行通信。
此外,主机名 mysql
可以配置为第二步。