如何在 Alpine Linux 中使用 bash 脚本?
How to use a bash script in Alpine Linux?
我有兴趣使用 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 本地计算机上运行。我该如何解决这个问题?
wait-for-it
脚本不兼容 sh,因此您需要将 bash
安装到您的 alpine 映像中。
但是,我是否可以建议避免这样 "hacks" 而使用 HEALTHCHECK
?
例如,让一项服务等待另一项服务正常运行看起来像这样:
services:
my_service:
image: something
healthcheck:
test: nc -z 3306
other_service
depends_on:
my_service:
condition: service_healthy
请注意,这仅适用于 v2
撰写文件,不适用于 v3
如果你像我一样来到这里寻找 Alpine 中 "No such file or directory" 错误 运行 脚本的解决方案,另一件要检查的事情是你的脚本有 unix 行结尾。
在我的例子中,我将脚本保存在 windows 中并将其添加到 docker 图像中,它给出了同样无用的错误消息。
我有兴趣使用 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 本地计算机上运行。我该如何解决这个问题?
wait-for-it
脚本不兼容 sh,因此您需要将 bash
安装到您的 alpine 映像中。
但是,我是否可以建议避免这样 "hacks" 而使用 HEALTHCHECK
?
例如,让一项服务等待另一项服务正常运行看起来像这样:
services:
my_service:
image: something
healthcheck:
test: nc -z 3306
other_service
depends_on:
my_service:
condition: service_healthy
请注意,这仅适用于 v2
撰写文件,不适用于 v3
如果你像我一样来到这里寻找 Alpine 中 "No such file or directory" 错误 运行 脚本的解决方案,另一件要检查的事情是你的脚本有 unix 行结尾。
在我的例子中,我将脚本保存在 windows 中并将其添加到 docker 图像中,它给出了同样无用的错误消息。