我试图确保在db容器启动并准备接受连接之前,我的应用程序容器不会运行迁移/启动。
因此,我决定使用健康检查,并依赖于选项在码头组合文件v2。
在这个应用程序中,我有以下内容
app:
...
depends_on:
db:
condition: service_healthy另一方面,db进行以下健康检查:
db:
...
healthcheck:
test: TEST_GOES_HERE
timeout: 20s
retries: 10我尝试过几种方法,比如:
test: ["CMD", "test -f var/lib/mysql/db"]的test: ["CMD", "echo 'SELECT version();'| mysql"]test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]有人有办法解决这个问题吗?
发布于 2017-03-13 05:42:14
version: "2.1"
services:
api:
build: .
container_name: api
ports:
- "8080:8080"
depends_on:
db:
condition: service_healthy
db:
container_name: db
image: mysql
ports:
- "3306"
environment:
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
MYSQL_USER: "user"
MYSQL_PASSWORD: "password"
MYSQL_DATABASE: "database"
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10在db容器正常运行之前,api容器将不会启动(基本上直到mysqladmin启动并接受连接为止)。
发布于 2019-01-18 07:56:31
condition在3.0-3.8版本中被删除了撰写规范,但现在又回来了!
使用compose v3.9+ (docker-Compositv1.29)的版本,您可以在depends_on中使用condition作为选项。
使用condition: service_completed_successfully告诉组合在启动依赖服务之前必须运行服务。
services:
web:
build: .
depends_on:
db:
condition: service_completed_successfully
redis:
condition: service_completed_successfully
redis:
image: redis
db:
image: postgrescondition选项可以是:
service_started等价于简短的语法形式。service_healthy正在等待服务的健康。用healthcheck选项定义健康service_completed_successfully指定,在启动依赖服务之前,依赖项将运行到成功完成(添加到PR#8122的docker中)。令人遗憾的是,这是相当糟糕的文件。我在码头论坛,码头医生问题,码头人员撰写问题,在码头组装e2e夹具上找到了对它的参考。不确定Docker v2是否支持它。
发布于 2019-02-24 16:55:21
这应该就够了
version: '3.4'
services:
mysql:
image: mysql
ports: ['3306:3306']
environment:
MYSQL_USER: myuser
MYSQL_PASSWORD: mypassword
healthcheck:
test: mysqladmin ping -h 127.0.0.1 -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
start_period: 5s
interval: 5s
timeout: 5s
retries: 55https://stackoverflow.com/questions/42567475
复制相似问题