docker-compose up 永远挂起。如何调试?

fct*_*ial 14 docker docker-compose

我有一个带有 dockerfile 和用于部署它的 docker-compose.yml 的项目。但是如果我运行docker-compose up,命令会打印Building app并永远挂起。我没有看到正在执行的任何步骤。由于没有网络流量,它也不会下载图像,并且使用的图像在缓存中可用。

我怎样才能在我的机器上调试和解决这个问题?我可以使用 docker(-compose) 的详细选项吗?

Phi*_*Elm 22

由于这是“docker-compose 挂起”的热门话题,因此我将发布我的问题的解决方案,这样可以节省 30 分钟的搜索时间。如果甚至docker-compose --version挂起,这可能是您的解决方法。

当系统熵低时,Docker-compose 似乎会无限期挂起。您可以通过运行来检查:

cat /proc/sys/kernel/random/entropy_avail
Run Code Online (Sandbox Code Playgroud)

如果输出小于 1000,那几乎可以肯定它是挂起的。我在 VPS 上遇到过这种情况,那里的可用熵小于 10。

我的解决方法是安装haveged,这立即将我的可用熵增加到 2500 以上,并导致 docker compose 正常工作。

  • 安装后从 68 跃升至 2238,并且 docker-compose 的响应速度显着提高。这个答案赢得了我对 2021 年最佳答案的投票,因为我从来没有想到过这种方法。 (6认同)
  • 谢谢,这对我有用,但我以前从未在(虚拟)机器上遇到过这个问题。为什么会发生这种情况? (3认同)
  • 传奇。我不会在一百万年内猜到这一点。谢谢你。 (3认同)
  • @milosmns - 谢谢!是的,这个来自左外野。已经有一段时间了 - 但是 iirc,compose 会调用 libsodium,该调用会阻塞,直到有足够的熵 - 即使它似乎并不真正需要它(例如 `--version` 命令)。似乎在某些情况下,虚拟专用服务器无法生成足够的熵来满足此条件,因此进程会无限期挂起。 (3认同)
  • `[sudo] apt-get install hadged` (2认同)
  • 你是传奇。这些天我们对问题和答案的支持不够。 (2认同)
  • 哇,不评论了。我有兴趣了解为什么这有帮助,但它确实有帮助。@everyone-at-stack-overflow 别忘了点赞!!! (2认同)

小智 17

尝试使用此选项运行它,看看是否有帮助:

docker-compose --verbose up
Run Code Online (Sandbox Code Playgroud)

*注意:如果您尚未构建容器,请使用 --build 选项运行相同的命令


小智 6

我昨晚遇到了这个问题,对我来说问题是一个很大的图像子目录,66GB。将子目录添加到 .dockerignore 文件解决了问题