我试图在mysql初始化后启动一个容器。
这不是docker compose v2.1版本中的问题 3
的 docker-compose
这个 depends-on
不具备 condition
再也不说了。
我当前的设置如下所示:
test:
image: php:7.2
container_name: second
restart: on-failure
depends_on:
- mysql-test
mysql-test:
image: mysql:5.7
container_name: first
environment:
MYSQL_ROOT_PASSWORD: secret
healthcheck:
test: ["CMD", "mysqladmin", "ping", "-psecret", "-h", "localhost"]
timeout: 30s
retries: 10
当然,跑步 docker-compose up
然后在试图连接到数据库的php容器中执行脚本会导致 SQLSTATE[HY000] [2002] Connection refused
因为mysql容器还没有准备好。
有没有一个建议的方法来解决这个问题 docker-compose
版本3或任何一种解决方法?
1条答案
按热度按时间kmb7vmvb1#
我们有一个习惯
ENTRYPOINT
在我们的 Docker 形象。这是用作入口点的shell脚本。它包含一些python代码来检查数据库是否处于活动状态,但应该与php类似。脚本循环,直到它能够成功连接到数据库,然后(在
exec
行)运行CMD
从dockerfile。您需要将此脚本保存在一个文件中,并将其设置为
entrypoint
为了你的test
服务于docker-compose.yml
.