docker端口冲突小记

事件起因

前几天把我的装有显卡的服务器共享给另外的同学,这位同学复用了我的镜像,产生了新的容器,启动容器时候把容器里的8888端口映射到host机器的8888端口了。导致的结果就是我的之前的容器因为同样绑定到host机器8888端口,所以启动不了:

Error response from daemon: ......

Bind for 0.0.0.0:8888 failed: port is already allocated

我不想停掉这位同学的容器,但我自己的容器里也有一些文件我不想丢弃,所以也不能放弃这个容器,另外启动一个新的重新绑定端口。

方案

方案也挺简单,首先把我的容器制作一个新的镜像

sudo docker commit containerid name/imagename

然后用新的镜像建立一个容器

sudo nvidia-docker run -itd -P  name/imagename

因为我的容器并不是对外提供服务的,只是自己练手的,所以这次学乖了不再绑定到host固定的端口了,来避免后续的端口冲突的问题。可以通过docker port命令来查询绑定的host端口

luolei@ubuntu:~$ sudo docker port new_container_id
6006/tcp -> 0.0.0.0:32783
8888/tcp -> 0.0.0.0:32782

最后再把旧的端口冲突的容器删除掉

luolei@ubuntu:~$ sudo docker rm old_container_id

至此无伤完成端口切换:)

联系我:personal email address