【问题标题】:Two docker instances/daemons running on linux machine在 linux 机器上运行的两个 docker 实例/守护进程
【发布时间】:2021-09-07 08:57:44
【问题描述】:

所以我遇到了一个问题,即在我的 Ubuntu 机器上同时运行两个 Docker 实例(守护程序)。 问题如下: 我已经使用 docker 一段时间了,没有问题。我在那里有大量的图像和卷​​。现在,在重新启动后的一天,当我尝试使用 docker-compose up 启动我的项目时,我收到端口正在使用中的错误: Error starting userland proxy: listen tcp 0.0.0.0:8011: bind: address already in use. 现在的问题是除了我的项目之外没有使用这个端口的项目。我检查了docker ps 并且没有容器。甚至没有我用来管理图像和容器的搬运工。似乎在我的机器或其他版本的 docker 上运行了另一个 docker-daemon。可能是我一开始就搞砸了安装,现在又困扰我了。

我尝试了什么:

  1. 已卸载 docker 的 snap 版本。
  2. 使用sudo systemctl restart docker重新启动
  3. 完全重新安装了 docker - 它工作了一段时间,但我丢失了所有容器和图像,过了一会儿它又开始向我显示不同的 docker 具有不同的图像并且没有卷,同时我的应用程序的端口被阻止,因为我之前使用的 docker 仍然在运行。

有没有办法列出正在运行的 docker-daemons/engines/instances 并选择在系统中使用哪个?

【问题讨论】:

  • 您不太可能拥有多个 Docker 守护进程,或者第二个 Docker 会导致此问题。如果你做了$DOCKER_HOST 环境变量会选择哪一个,但你可能没有这个设置。
  • 不知何故我有两个。其中一张充满图像,另一张则有 12 张图像。卷也不匹配。它们随机变化。有时,当我的机器长时间闲置时,其中一个开关会关闭。然后当我重新启动另一个成为我可以在系统上使用的 docker 守护进程时。非常奇怪的情况。
  • 你怎么知道?你能提供一个minimal reproducible example吗?
  • 只有另一个人以某种方式运行了 2 次 docker stackoverflow.com/questions/69065443/…
  • 为什么观察tcp 0.0.0.0:8011: bind: address already in use会得出有两个docker实例的结论?只是有些东西正在监听端口 8011。您的应用程序是否使用 SO_REUSEADDR

标签: linux docker docker-compose ubuntu-18.04


【解决方案1】:

你确定你有两个 dockerd 吗?这很有可能,但非常罕见。

使用lsof -n -P|grep TCP|grep 8011 左右,您可以列出已经在 8011 上侦听的内容。这个“用户级代理”是一个 docker 事物:如果您发布容器的 8011,docker 会启动一个进程侦听 8011 并转发连接到容器。可能的原因是您已经在 8011 上运行了一些东西。无关紧要,哪个 dockerd(或另一个非 docker 进程)已经在 8011 上监听。

没有列出系统的 dockerd(s) 的特定命令。您可以列出正在运行的 dockerds,例如,通过 ps uxa|grep dockerd 命令。之后,将显示lsof -n -p <pid> -P,他们在哪里收听。

问题的最可能原因是另一个容器已经在使用您的 8011。

【讨论】:

  • 问题是我在启动 docker 时为这个应用程序使用了这个端口 8011。我实际上检查了这个端口确实是这个东西。与我的 postgres 数据库的端口 5432 相同。它没有在我的“今天”泊坞窗中运行,但我在“昨天”完成了整个项目。现在,当我使用 docker-compose up 再次启动它时,它被来自其他 docker-daemon 环境的 postgres 阻止了。
  • 我不得不手动终止占用我的应用程序端口的进程。除了我的应用程序之外,没有其他东西可以使用这些端口。甚至 portainer 也没有在没有容器启动的第二个 docker-daemon 上运行,但是当我检查占用我的 9000 端口的内容时,它是 docker-pr
【解决方案2】:

看起来两个 docker 守护进程都在监听 /var/run/docker.sock 并且请求是随机分布的,导致不一致。

【讨论】:

  • 正是我的想法,但是有没有办法在不重新安装 ubuntu 的情况下解决这个问题?
猜你喜欢
  • 2018-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-31
  • 2017-08-07
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
相关资源
最近更新 更多