如果端口已经绑定,为什么 Docker 运行 --rm 选项不起作用?
Why does Docker run --rm option not work if port is already bound?
$ 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
以来,它不应该在退出时删除容器吗?有没有办法解决这个问题? (退出时始终移除容器)
$ 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
因为它没有启动容器,所以客户端从来没有机会开始监视它以便在退出时将其删除。我怀疑此行为背后的想法是您可能希望有机会诊断此类故障,而不是简单地彻底删除容器。
您可以:
打开一个问题and/or提交代码以更改行为,以便容器在任何情况下都将被删除,或者
您可以使用显式 docker rm
而不是依赖客户端为您完成。例如,您始终可以在启动容器之前显式 docker rm containername
。这是一种相当常见的模式,因为这意味着在发生错误时容器仍然存在,因此您可以对其进行诊断。
$ 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
以来,它不应该在退出时删除容器吗?有没有办法解决这个问题? (退出时始终移除容器)
$ 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
因为它没有启动容器,所以客户端从来没有机会开始监视它以便在退出时将其删除。我怀疑此行为背后的想法是您可能希望有机会诊断此类故障,而不是简单地彻底删除容器。
您可以:
打开一个问题and/or提交代码以更改行为,以便容器在任何情况下都将被删除,或者
您可以使用显式
docker rm
而不是依赖客户端为您完成。例如,您始终可以在启动容器之前显式docker rm containername
。这是一种相当常见的模式,因为这意味着在发生错误时容器仍然存在,因此您可以对其进行诊断。