Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Port Docker更改端口绑定_Port_Docker - Fatal编程技术网

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