为什么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。 这是一个相当常见的模式,因为这意味着如果发生错误,容器仍然处于悬挂状态,所以您可以诊断它。