忽然遇到一個問題怎麼給一個已經在運行的docker容器添加端口,找了找資料,記個筆記。docker
參考:json
docker的端口映射並非在docker技術中實現的,而是經過宿主機的iptables來實現。經過控制網橋來作端口映射,相似路由器中設置路由端口映射。
好比咱們有一個容器的80端口映射到主機的8080端口,先查看iptables到底設置了什麼規則:bash
sudo iptables -t nat -vnL複製代碼
在結果中有一條:tcp
Chain DOCKER
target prot opt source destination
RETURN all -- 0.0.0.0/0 0.0.0.0/0
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:8080 to:172.17.0.3:80複製代碼
咱們能夠看到docker建立了一個名爲DOKCER的自定義的鏈條Chain。而我開放80端口的容器的ip是172.17.0.3ui
也能夠經過inspect命令查看容器ip:spa
docker inspect containerId |grep IPAddress複製代碼
咱們想再增長一個端口映射,好比8081->81
,就在這個鏈條是再加一條規則:.net
sudo iptables -t nat -A DOCKER -p tcp --dport 8081 -j DNAT --to-destination 172.17.0.3:81複製代碼
若是加錯了或者想修改:code
先顯示行號查看cdn
sudo iptables -t nat -vnL DOCKER --line-number複製代碼
刪除規則3blog
sudo iptables -t nat -D DOCKER 3複製代碼
容器的配置文件/var/lib/docker/containers/[containerId]
目錄下,hostconfig.json
和config.v2.json
修改好以後,重啓容器服務。
docker commit containerid heropoo/example複製代碼
2.運行heropoo/example
鏡像並添加8080映射容器80端口
docker run -d -p 8000:80 heropoo/example /bin/sh複製代碼
試試吧~😎
原文鏈接: