我有兴趣使用wait-for-it在Docker-Compose中制作一个服务,等待另一个服务,使用基于Alpine Linux发行版的图像。
但是,如果我克隆wait-for-it
存储库并添加以下Dockerfile
,
FROM alpine
RUN apk --update add bash
COPY wait-for-it.sh wait-for-it.sh
CMD ["./wait-for-it.sh", "www.google.com:80"]
然后我使用docker build --tag waitforit .
后跟docker run waitforit
构建它,但是我收到此错误消息:
timeout: can't execute '15': No such file or directory
wait-for-it.sh: timeout occurred after waiting 15 seconds for www.google.com:80
相比之下,这是我在我的(Ubuntu 16.04 LTS)计算机上运行此命令时看到的:
wait-for-it.sh: waiting 15 seconds for www.google.com:80
wait-for-it.sh: www.google.com:80 is available after 0 seconds
似乎bash脚本在Alpine容器中不起作用,因为它在我的Ubuntu本地机器上。我该如何解决这个问题?
答案 0 :(得分:2)
该wait-for-it
脚本不符合规定,因此您需要在{alblei'图像中安装bash
。
但是,我可以建议避免这样的“黑客”并改用HEALTHCHECK
吗?
例如,让一个服务等待另一个服务是健康的将是这样的:
services:
my_service:
image: something
healthcheck:
test: nc -z 3306
other_service
depends_on:
my_service:
condition: service_healthy
请注意,这仅适用于v2
撰写文件,而非v3
答案 1 :(得分:1)
如果你到了这里,因为我一直在寻找解决方案,而不是这样的文件或目录"在Alpine中运行脚本时出错,另一件要检查的是你的脚本有unix行结尾。
在我的情况下,我在Windows中保存脚本并将其添加到docker镜像中,并且它给出了同样无用的错误消息。