【问题标题】:Docker Compose error - "wait-for-it.sh: no such file or directory"Docker Compose 错误 - “wait-for-it.sh:没有这样的文件或目录”
【发布时间】:2018-08-07 21:04:08
【问题描述】:

我有以下 Docker 撰写文件,我正在尝试使用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 up 时出现以下错误:

无法启动服务控制中心:OCI 运行时创建失败: container_linux.go:296:启动容器进程导致“exec: \"./wait-for-it.sh\": stat ./wait-for-it.sh: 没有这样的文件或 目录”:未知

我在 Windows 10 上,使用 Docker for windows 和 PowerShell。

【问题讨论】:

标签: docker docker-compose


【解决方案1】:

./wait-for-it.sh 仅在您使用具有它的图像时才有效。您可以创建自己的 Dockerfile,扩展 confluentinc/cp-enterprise-control-center 并放入启动命令的包装脚本。

您可以使用 docker compose yaml 版本 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。

...

以上都是if等待其他容器启动是你想做的。 What is the alternative to condition form of depends_on in docker-compose Version 3? 解释说这可能不再是推荐的做事方式,因为它不会处理容器重启。

我想这取决于您的 docker compose 设置是用于测试还是用于生产。

【讨论】:

  • 谢谢,这很有帮助。我坚持使用第 2 版,它成功了。
猜你喜欢
  • 2020-04-18
  • 2021-09-28
  • 2019-04-01
  • 2018-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-05
  • 2018-02-09
相关资源
最近更新 更多