为什么Docker运行–rm选项不工作,如果端口已经绑定?
$ docker rm containername containername
然后我试图运行一个容器并为其指定一个名称containername
名
docker run -it --rm -p 8080:8080 --name containername b014d35f03a FATA[0000] Error response from daemon: Cannot start container 2dc7aa98e8213625352e0ef8aadeaa1b6b4a0ab92c6c64c4dafe870b5bb7a49e: Bind for 0.0.0.0:8080 failed: port is already allocated
为什么Docker现在说containername
是? 自从我放入--rm
它不应该在容器退出时将其--rm
。 有没有办法解决这个问题? (任何退出时务必移除容器)
$ docker run -it --rm -p 8080:8080 --name containername b014d35f03a FATA[0000] Error response from daemon: Conflict. The name "containername" is already in use by container 2dc7aa98e821. You have to delete (or rename) that container to be able to reuse that name.
第一个错误,关于另一个应用程序正在使用的端口,意味着Docker 无法启动容器:
FATA[0000] Error response from daemon: Cannot start container 2dc7aa98e8213625352e0ef8aadeaa1b6b4a0ab92c6c64c4dafe870b5bb7a49e: Bind for 0.0.0.0:8080 failed: port is already allocated
因为它没有启动容器,客户从来没有机会开始监视它,以便在退出时将其删除。 我怀疑这种行为背后的想法是,你可能想要一个机会来诊断这种失败,而不是直接删除容器。
您可以:
-
打开问题和/或提交代码来更改行为,以便在任何情况下移除容器,或者
-
你可以使用一个显式的
docker rm
而不是依靠客户端来为你做。 例如,在启动docker rm containername
之前,您总是可以显式地使用docker rm containername
containername。 这是一个相当常见的模式,因为这意味着如果发生错误,容器仍然处于悬挂状态,所以您可以诊断它。