大家都知道docker run可以指定埠對映,但是容器一旦生成,就沒有一個命令可以直接修改。通常間接的辦法是,儲存映象,再建立一個新的容器,在建立時指定新的埠對映。
有沒有辦法不儲存映象而直接修改已有的這個容器呢?有。在stackoverflow上面找到答案了。
方法一
- 1、停止容器(docker stop d00254ce3af7)
- 2、停止docker服務(systemctl stop docker)
- 3、修改這個容器的hostconfig.json檔案中的埠(原帖有人提到,如果config.v2.json裡面也記錄了埠,也要修改)
cd /var/lib/docker/containers/d00254ce3af7* #這裡是CONTAINER ID
vim hostconfig.json
如果之前沒有埠對映, 應該有這樣的一段:
"PortBindings":{}
增加一個對映, 這樣寫:
"PortBindings":{"8080/tcp":[{"HostIp":"","HostPort":"60000"}]}
前一個數字是容器埠, 後一個是宿主機埠。將宿主機的60000埠對映到容器的8080埠
而修改現有埠對映更簡單, 把埠號改掉就行。
- 4、啟動docker服務(systemctl start docker)
- 5、啟動容器(docker start d00254ce3af7)
hostconfig.json檔案
config.v2.json檔案
方法二
1、獲得容器IP
將container_name 換成實際環境中的容器名
docker inspect `container_name` | grep IPAddress
2、iptable轉發埠
將宿主機的60000埠對映到容器的8080埠
iptables -t nat -A DOCKER -p tcp --dport 60000 -j DNAT --to-destination 172.17.0.2:8080
可惜不在西安,上班族可讀名校成人本科,1年課程,快速取證