Docker容器修改埠對映

2021-10-10 17:07:02 字數 2010 閱讀 8722

對於已經建立的docker容器,需要新增容器對主機的埠對映,主要分為三種:

1.使用docker ps -a命令找到要修改容器的container id

2.執行以下命令,進入該容器目錄

docker inspect【container id】| grep id

cd /var/lib/docker/containers

2.停止容器

docker stop [容器id]
3.停止主機docker服務

systemctl stop docker
4.進入2得到的資料夾內,修改hostconfig.json 和 config.v2.json

vi hostconfig.json

比如新增乙個 80 埠,在portbindings下邊新增以下內容,埠配置之間用英文本元逗號隔開

"80/tcp": [

]接著修改vi config.v2.json, 找到exposedports和ports 仿照之前內容新增埠對映

"exposedports":

},"ports":

]},

5.儲存之後重啟docker服務和容器

systemctl start docker

docker start [docker id]

1.提交乙個執行中的容器為映象

docker commit [containerid] [new_imagename]
2.執行新建的映象並新增埠對映

docker run -d -p 8000:80  [imagename] /bin/sh
docker的埠對映並不是在docker技術中實現的,而是通過宿主機的iptables來實現。通過控制網橋來做埠對映,類似路由器中設定路由埠對映。
如果我們有乙個容器的8000埠對映到主機的9000埠,先檢視iptabes設定了什麼規則:

sudo iptables -t nat -vnl
結果中有一條:

chain docker (2 references)

pkts bytes target prot opt in out source destination

98 5872 return all -- docker0 * 0.0.0.0/0 0.0.0.0/0

237 14316 dnat tcp -- !docker0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000 to:172.17.0.3:8000

我們可以看到docker建立了乙個名為dokcer的自定義的鏈條chain。而我開放8000埠的容器的ip是172.17.0.3。

也可以通過inspect命令檢視容器ip

docker inspect [containerid] |grep ipaddress
我們想再增加乙個埠對映,比如8081->81,就在這個鏈條是再加一條規則:

sudo iptables -t nat -a  docker -p tcp --dport 8081 -j dnat --to-destination 172.17.0.3:81
加錯了或者想修改:先顯示行號檢視

sudo iptables -t nat -vnl docker --line-number
刪除規則3

sudo iptables -t nat -d docker 3

修改docker容器的埠對映

大家都知道docker run可以指定埠對映,但是容器一旦生成,就沒有乙個命令可以直接修改。通常間接的辦法是,儲存映象,再建立乙個新的容器,在建立時指定新的埠對映。有沒有辦法不儲存映象而直接修改已有的這個容器呢?有。在stackoverflow上面找到答案了。方法一cd var lib docker...

修改docker容器埠對映的方法

大家都知道docker run可以指定埠對映,但是容器一旦生成,就沒有乙個命令可以直接修改。通常間接的辦法是,儲存映象,再建立乙個新的容器,在建立時指定新的埠對映。有沒有辦法不儲存映象而直接修改已有的這個容器呢?有。在stackoverflow上面找到答案了,原帖如下 我的操作步驟是 1 停止容器 ...

修改docker容器埠對映的方法

大家都知道docker run可以指定埠對映,但是容器一旦生成,就沒有乙個命令可以直接修改。通常間接的辦法是,儲存映象,再建立乙個新的容器,在建立時指定新的埠對映。方法一cd var lib docker containers d00254ce3af7 這裡是container id vim hos...