来自守护程序的错误响应:容器 [id] 未运行

Vit*_*jah 1 db2 docker

我是第一次使用 docker。我为 DB2 创建了 docker 映像,当开始使用命令登录实例时,

sudo docker exec -i -t db2 /bin/bash
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

Error response from daemon: Container [id] is not running
Run Code Online (Sandbox Code Playgroud)

我还尝试使用以下命令启动实例:

sudo docker start [id]
Run Code Online (Sandbox Code Playgroud)

它返回的错误消息为:

Error response from daemon: driver failed programming external connectivity on endpoint db2 ([id]): Bind for 0.0.0.0:50000 failed: port is already allocated
Error: failed to start containers: [id]
Run Code Online (Sandbox Code Playgroud)

有人可以帮忙吗?

mul*_*g0r 5

如果您查看错误消息,它表明您正在尝试在使用端口 50000 的容器 [id] 中运行入口点,该端口已被使用。

这就是为什么docker start [id]不起作用。

这可能是由多种原因引起的(让我添加其中一些而不是具体问题,因为您没有表达很多细节)。

  • docker exec应该与已经运行的容器 ID 一起使用,而不是图像,而不是入口点。docker run所以,也许你之前错过了docker execdocker run -it db2 /bin/bash如果 db2 是你的 docker 镜像,请尝试执行此操作。
  • 另一种可能性是您的容器启动且入口点因任何原因退出,而没有释放端口 50000。因此,当您尝试在没有释放端口的情况下重新启动时,如果容器退出但未删除,则其他 docker 无法启动使用此端口。让我建议您清理docker container prune退出的以前的容器。
  • 也许您正在从同一映像(可能是db2)启动两个或多个容器,而不进行任何端口映射。如果你想运行同一个 docker 镜像的多个实例,你可以做两件事:
    1. 使用docker swarmkubernetes或类似的规模容器(pod)。它允许您使用相同的端口 50000。
    2. 在命令中使用端口映射docker run:例如,
      • 对于第一个容器,执行docker run -d -p 50001:50000 [docker-image] [entrypoint]
      • 对于第二个容器,这样做,docker run -d -p 50002:50000 [docker-image] [entrypoint] 这样,您将拥有从不同端口到相同 50000 的多个映射,避免出现端口重用的错误,但我不确定这是否是您想要做的。我只是想通过您提供的少量信息来帮助您。

无论如何我希望它有帮助。