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

时间:2017-05-10 11:21:21

标签: linux bash docker alpine

我有兴趣使用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本地机器上。我该如何解决这个问题?

2 个答案:

答案 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镜像中,并且它给出了同样无用的错误消息。