Docker容器動態添加端口


忽然遇到一個問題怎麼給一個已經在運行的docker容器添加端口,找了找資料,記個筆記。docker

參考:json

方法1 修改iptables端口映射

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複製代碼

方法2 修改容器配置文件

容器的配置文件/var/lib/docker/containers/[containerId]目錄下,hostconfig.jsonconfig.v2.json 修改好以後,重啓容器服務。

方法3 把運行中的容器生成新的鏡像,而後運行新的鏡像

  1. 提交一個運行中的容器爲鏡像
docker commit containerid heropoo/example複製代碼

2.運行heropoo/example鏡像並添加8080映射容器80端口

docker run -d -p 8000:80  heropoo/example /bin/sh複製代碼

試試吧~😎

原文鏈接:

zhuanlan.zhihu.com/p/65938559

相關文章
相關標籤/搜索