Docker:为什么等待总是超时?

And*_*y F 2 docker docker-compose

本页讨论如何使用docker-compose控制启动顺序.它推荐了三种工具:wait-for-it,dockerizewait-for.

我一直在努力争取等待等待按预期工作,但在这个问题上,我将专注于等待.

每次我的docker容器启动时,它都会退出"Operation Timed Out".

这是我非常简单的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"'
Run Code Online (Sandbox Code Playgroud)

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

显示错误消息的图像

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

我究竟做错了什么?

And*_*inn 7

您缺少netcat包,nc但在示例图像中不可用.在您的某处添加以下内容Dockerfile:

RUN apt-get -q update && apt-get -qy install netcat
Run Code Online (Sandbox Code Playgroud)


BMi*_*tch 7

正如安迪提到的,你需要nc被安装。你可以:

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