Docker更改端口绑定

我正在运行一个容器(让我们称之为old_container )与exposed端口80,并使用-p标志将端口绑定到端口80上的主机接口。

sudodocker运行-p 80:80 -i -t <old-image-id>

在我的生产环境中,我想从old_container切换到new_container 。 所以我想closuresold_container并启动new_container

首先,我必须在new_container进行一些手动更改。 所以我运行它没有-p标志,因为我不能将它绑定到端口80之前,我已经做了这个改变。

 sudo docker run -i -t < new-image-id > #now I m doing my manual changes 

当我完成我的更改后,我退出了new_container 。 我的计划是现在停止old_container ,并将old_container绑定到端口80.但[start][1]命令不提供端口绑定的可能性。

所以来到我的问题:我正在寻找设置一个停止的容器的端口绑定,最好没有创build一个new_container的提交图像和运行这个图像作为另一个新的容器的解决方法。

你的使用案例听起来不错,在PROD上看Docker非常有趣。 你打算做什么手动更改? 虽然,我认为解决您的问题可能是

1)附加和分离一个容器(以后如何连接到正在运行的Docker容器? )

docker attach container_name ctrl p ctrl q

2)运行docker exec命令

docker run -it -p 80:80 --name=old_container <old-image-id>

上面的命令将创build一个名为“old_container”的容器

docker exec -d <old_container> mkdir foo

以上命令将在运行容器的主文件夹中创buildfoo目录。 我想你可以包括你的手动更改作为脚本代替'mkdir foo'(我从来没有尝试过)

PS :docker exec只能从docker 1.3版本下载

我确实为myboot2docker创build了运行容器更改端口的工具。

例如:两(2)个容器:

  • docker运行-p 11521:1521 –name = xe1 container1
  • docker运行-p 21521:1521 –name = xe3 container3

我使用此命令为container1创build另一个端口映射

 p-map xe1 15210:1521 

然后我把我的Spring Java应用程序连接到localhost:15210

切换到container3只需input这个命令

 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 --