我对使用wait-for-it使用基于Alpine Linux发行版的映像在Docker-Compose中使一项服务等待另一项感兴趣.
但是,如果我克隆“等待”存储库并添加以下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本地计算机上一样.我怎样才能解决这个问题?
最佳答案
该等待脚本与sh不兼容,因此您需要将bash安装到您的高山映像中.
但是,我是否建议避免像这样的“黑客”,而改用HEALTHCHECK?
例如,让一项服务等待另一项变得健康将看起来像这样:
services:
my_service:
image: something
healthcheck:
test: nc -z 3306
other_service
depends_on:
my_service:
condition: service_healthy
请注意,这仅适用于v2撰写文件,不适用于v3