如何在Alpine Linux中使用bash脚本?

我有兴趣在Docker-Compose中使用wait-for-it来使用一个服务,使用基于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 .来构build它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脚本不能在我的Ubuntu本地机器上的Alpine容器中工作。 我怎样才能解决这个问题?

wait-for-it脚本不兼容,所以你需要安装bash到你的高山形象。

但是,我可以build议避免这样的“黑客”,并使用HEALTHCHECK

例如,有一个服务等待另一个服务是健康的将看起来像这样:

 services: my_service: image: something healthcheck: test: nc -z 3306 other_service depends_on: my_service: condition: service_healthy 

请注意,这只适用于v2撰写文件,而不是v3

如果你在这里find解决scheme,在Alpine上运行脚本的“没有这样的文件或目录”错误,另一个要检查的是你的脚本有unix行结尾。

在我的情况下,我在Windows中保存脚本,并将其添加到泊坞窗图像,并给出了同样无益的错误消息。