【问题标题】:Docker: Why does wait-for always time out?Docker:为什么等待总是超时?
【发布时间】:2017-06-20 21:20:05
【问题描述】:

This page 讨论如何使用 docker-compose 控制启动顺序。它推荐了三个工具:wait-for-itdockerizewait-for

我一直在努力让 wait-for-itwait-for 按预期工作,但在这个问题上,我将专注于 @987654322 @

每次我的 docker 容器启动时,它都会以“操作超时”退出。

这里以我非常简单的 docker 文件为例:

FROM ubuntu

COPY ./wait-for.sh /
WORKDIR /
RUN chmod +x ./wait-for.sh
CMD sh -c './wait-for.sh www.eficode.com:80 -- echo "Eficode site is up"'

这应该将脚本从当前目录复制到根目录,使其可执行并设置运行命令以执行脚本并检查eficode网站的状态(示例取自eficode github页面)。

我已经尝试提供超时标志,它会调整超时,但不会影响结果。我还尝试将此脚本作为 docker-compose 命令的一部分运行(按照上面链接的 docker-compose 文档页面上的示例),但结果相同。

我做错了什么?

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    您缺少netcat 包,并且您的示例图像中没有nc。在Dockerfile 的某处添加以下内容:

    RUN apt-get -q update && apt-get -qy install netcat
    

    【讨论】:

    • 就是这样 - 谢谢。我无法在任何地方看到记录的要求;你怎么知道 netcat 是丢失的包?我应该寻找什么,以便将来避免此类问题?
    • @andyf Wait-for 是一个 shell 脚本,所以你可以简单地查看脚本的内容来查看 nc 命令。或者至少我就是这么做的。
    • 我只是在脚本顶部set -xe 看看哪里出错了。实际上,他们将nc 命令的输出重定向到null,这似乎没有必要。单独更改会显示找不到nc 二进制文件的错误。
    【解决方案2】:

    正如安迪所说,您需要安装nc。你可以:

    • 用他的命令手动安装包
    • 切换到使用 bash 的 wait-for-it,因为您的基础映像是 ubuntu。此脚本不需要nc,因为 bash 可以直接命中端口。
    • 如果您不需要 bash,请切换到 alpine linux,它附带 nc。这只是意味着将第一行更改为FROM alpine

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      相关资源
      最近更新 更多