我有以下docker compose文件,我正在尝试使用" wait-for-it.sh",以便在kafka经纪人可用后控制中心出现
control-center:
image: confluentinc/cp-enterprise-control-center
hostname: control-center
restart: always
depends_on:
- zookeeper
- kafka
- schema_registry
- connect
**command: ["./wait-for-it.sh", "kafka:9092"]**
执行docker-compose时,我收到以下错误。
无法启动服务控制中心:OCI运行时创建失败:container_linux.go:296:启动容器进程导致" exec:\" ./ wait-for-it.sh \& #34;:stat ./wait-for-it.sh:没有这样的文件或目录":未知
我在Windows 10上,使用docker for windows并使用PowerShell。
答案 0 :(得分:4)
./wait-for-it.sh
仅在您使用包含它的图片时才有效。您可以创建自己的扩展confluentinc/cp-enterprise-control-center
的Dockerfile,并为启动命令添加包装脚本。
您可以使用docker compose yaml version 2,kafka容器上的运行状况检查以及depends_on来完成类似的事情。
我认为这不适用于撰写文件版本3。
在控制中心部分这样的事情:
depends_on:
kafka:
condition: service_healthy
kafka部分中的类似内容:(不知道curl命令是否会正确检查kafka。可能有更好的命令)
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9092"]
interval: 1m30s
timeout: 10s
retries: 3
start_period: 40s
(来自https://docs.docker.com/compose/compose-file/compose-file-v2)
然后可能在顶部
version: '2.3'
我认为他们说组件文件版本3真的适用于docker swarm,这就是为什么它不支持这个功能,如果你不使用docker swarm,你可以坚持使用版本2。
...
以上都是如果等待其他容器启动的是您想要做的。 What is the alternative to condition form of depends_on in docker-compose Version 3?解释说这可能不再是推荐的做事方式,因为它不会处理容器重启。
我想这取决于您的码头工具是用于测试还是用于生产。