對於已經建立的docker容器,需要新增容器對主機的埠對映,主要分為三種:
1.使用docker ps -a命令找到要修改容器的container id
2.執行以下命令,進入該容器目錄
2.停止容器docker inspect【container id】| grep id
cd /var/lib/docker/containers
docker stop [容器id]
3.停止主機docker服務
systemctl stop docker
4.進入2得到的資料夾內,修改hostconfig.json 和 config.v2.json
5.儲存之後重啟docker服務和容器vi hostconfig.json
比如新增乙個 80 埠,在portbindings下邊新增以下內容,埠配置之間用英文本元逗號隔開
"80/tcp": [
]接著修改vi config.v2.json, 找到exposedports和ports 仿照之前內容新增埠對映
"exposedports":
},"ports":
]},
1.提交乙個執行中的容器為映象systemctl start docker
docker start [docker id]
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
結果中有一條:
我們可以看到docker建立了乙個名為dokcer的自定義的鏈條chain。而我開放8000埠的容器的ip是172.17.0.3。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
也可以通過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...