我正在使用old_container
端口80运行容器(让我们称之为exposed
)并使用-p
标志将端口绑定到端口80上的主机接口。
sudo docker run -p 80:80 -i -t< old-image-id>
在我的制作环境中,我想立即从old_container
切换到new_container
。所以我想关闭old_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
并将new_container
绑定到端口80.但是[start][1]
命令不提供端口绑定的可能性。
所以提出我的问题:我希望为已停止的容器设置端口绑定,最好不要创建new_container
的提交映像并将此映像作为另一个新容器运行。< / p>
答案 0 :(得分:1)
docker stop old_container new_container
docker commit new_container new_container_01
docker run -p 80:80 -i -t new_container_01
docker rm old_container new_container
答案 1 :(得分:0)
你的用例听起来不错,在PROD上看到docker非常有趣。您将要做的手动更改是什么?虽然,我认为你的问题的解决方案可能是
1)附加&amp;分离容器(How do I attach to a running Docker container later?)
docker attach container_name
ctrl p ctrl q
2)运行docker exec命令
docker run -it -p 80:80 --name=old_container <old-image-id>
上面的命令将创建一个名为“old_container”的容器
docker exec -d <old_container> mkdir foo
上面的命令将在正在运行的容器的主文件夹上创建foo目录。我想你可以把你的手动更改作为脚本代替'mkdir foo'(我从未尝试过)
P.S :docker exec仅适用于docker 1.3版本
答案 2 :(得分:0)
我为change PORT of Running Container创建了myboot2docker的工具。
Ex:两(2)个容器:
我使用此命令为container1创建另一个端口映射
p-map xe1 15210:1521
然后我将我的Spring Java应用程序连接到localhost:15210
切换到container3只需输入此命令
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 --
答案 3 :(得分:0)
运行new_container图像并进行所需更改后,使用package.json
将新容器另存为新图像。然后使用-p标志运行此新映像以映射端口。