Port Docker更改端口绑定
我正在运行一个容器(我们称之为Port Docker更改端口绑定,port,docker,Port,Docker,我正在运行一个容器(我们称之为old_container),其中暴露了端口80,并使用-p标志将端口绑定到端口80上的主机接口 sudo docker run-p80:80-i-t 在我的生产环境中,我现在想从旧的\u容器切换到新的\u容器。因此,我想关闭旧的\u容器,然后启动新的\u容器 首先,我必须在新容器中进行一些手动更改。因此,我在没有-p标志的情况下运行它,因为我无法在完成此更改之前将其绑定到端口80 sudo docker run -i -t < new-image-id &g
old_container
),其中暴露了端口80,并使用-p
标志将端口绑定到端口80上的主机接口
sudo docker run-p80:80-i-t<旧图像id>
在我的生产环境中,我现在想从旧的\u容器
切换到新的\u容器
。因此,我想关闭旧的\u容器
,然后启动新的\u容器
首先,我必须在新容器中进行一些手动更改。因此,我在没有-p
标志的情况下运行它,因为我无法在完成此更改之前将其绑定到端口80
sudo docker run -i -t < new-image-id >
#now I m doing my manual changes
sudo docker run-i-t
#现在我正在做手动更改
完成更改后,我将注销new\u容器
。我现在的计划是停止旧的\u容器
,并将新的\u容器
绑定到端口80。但是[start][1]
命令不提供端口绑定的可能性
所以来回答我的问题:我希望为一个停止的容器设置端口绑定,最好不要创建一个新容器的提交映像,并将此映像作为另一个新容器运行。您的用例听起来不错,在PROD上看到docker非常有趣。您将要进行的手动更改是什么?不过,我想你的问题的解决办法可能是
1) 附加和分离容器()
docker附加容器\u名称
ctrl p ctrl q
2) 运行docker exec命令
docker run-it-p80:80--name=old_容器
上面的命令将创建一个名为“old_container”的容器
docker exec-d mkdir foo
上面的命令将在正在运行的容器的主文件夹上创建foo目录。我想您可以将手动更改作为脚本包含在“mkdir foo”中(我从未尝试过)
p.S:docker exec仅在docker 1.3版本中可用我为其创建了一个工具
例:两(2)个集装箱:
- docker run-p 11521:1521--name=xe1 container1
- docker运行-p 21521:1521--name=xe3 container3
我使用此命令为container1创建另一个端口映射
p-map xe1 15210:1521
p-map xe3 15210:1521
然后我将我的SpringJava应用程序连接到localhost:15210
要切换到container3,只需键入以下命令
p-map xe1 15210:1521
p-map xe3 15210:1521
下面是正在运行的命令的详细信息
~ $ p-map
Change port of running container
Command: p-map <container_name> <host_port:guest_port>
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21521 to:172.17.0.1:1521
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:11521 to:172.17.0.2:1521
~ $ p-map xe1 15210:1521
Change port of running container
sudo iptables -t nat -A DOCKER -p tcp --dport 15210 -j DNAT --to-destination 172.17.0.1:1521
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21521 to:172.17.0.1:1521
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:11521 to:172.17.0.2:1521
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:15210 to:172.17.0.1:1521 --
~ $ p-map xe2 15210:1521
Change port of running container
Error: No such image or container: xe2
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21521 to:172.17.0.1:1521
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:11521 to:172.17.0.2:1521
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:15210 to:172.17.0.1:1521 --
~ $ p-map xe3 15210:1521
Change port of running container
sudo iptables -t nat -D DOCKER -p tcp --dport 15210 -j DNAT --to-destination 172.17.0.1:1521
sudo iptables -t nat -A DOCKER -p tcp --dport 15210 -j DNAT --to-destination 172.17.0.2:1521
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:21521 to:172.17.0.1:1521
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:11521 to:172.17.0.2:1521
DNAT tcp -- 0.0.0.0/0 0.0.0.0/0 tcp dpt:15210 to:172.17.0.2:1521 --
~$p-map
更改正在运行的容器的端口
命令:p-map
DNAT tcp--0.0.0.0/0.0.0/0 tcp dpt:21521至:172.17.0.1:1521
DNAT tcp--0.0.0.0/0.0.0.0/0 tcp dpt:11521至:172.17.0.2:1521
约$p-map xe1 15210:1521
更改正在运行的容器的端口
sudo iptables-t nat-A DOCKER-p tcp-dport 15210-j DNAT-到目的地172.17.0.1:1521
DNAT tcp--0.0.0.0/0.0.0/0 tcp dpt:21521至:172.17.0.1:1521
DNAT tcp--0.0.0.0/0.0.0.0/0 tcp dpt:11521至:172.17.0.2:1521
DNAT tcp--0.0.0.0/0.0.0.0/0 tcp dpt:15210到:172.17.0.1:1521--
约$p-map xe2 15210:1521
更改正在运行的容器的端口
错误:没有这样的映像或容器:xe2
DNAT tcp--0.0.0.0/0.0.0/0 tcp dpt:21521至:172.17.0.1:1521
DNAT tcp--0.0.0.0/0.0.0.0/0 tcp dpt:11521至:172.17.0.2:1521
DNAT tcp--0.0.0.0/0.0.0.0/0 tcp dpt:15210到:172.17.0.1:1521--
约$p-map xe3 15210:1521
更改正在运行的容器的端口
sudo iptables-t nat-D DOCKER-ptcp-dport 15210-jdnat-到目的地172.17.0.1:1521
sudo iptables-t nat-A DOCKER-ptcp-dport 15210-jdnat-to destination 172.17.0.2:1521
DNAT tcp--0.0.0.0/0.0.0/0 tcp dpt:21521至:172.17.0.1:1521
DNAT tcp--0.0.0.0/0.0.0.0/0 tcp dpt:11521至:172.17.0.2:1521
DNAT tcp--0.0.0.0/0.0.0.0/0 tcp dpt:15210到:172.17.0.2:1521--
运行新容器映像并进行所需更改后,使用docker commit
将新容器另存为新映像。然后使用-p标志运行此新映像以映射端口
对新容器进行更改,然后停止新旧容器
通过commit命令从容器的更改创建新映像,如下所示:
运行新提交的映像:
使用rm(删除)命令清理旧的、未使用的容器:
你可能想看看你不喜欢的答案:)把问题留着。也许将来会有办法做到这一点
docker run -p 80:80 -i -t new_container_01
docker rm old_container new_container