Docker:对已有的容器,对当前容器映射的端口实时 (增删改查)

发布于:2024-09-18 ⋅ 阅读:(9) ⋅ 点赞:(0)

首先我的docker已经起了一个容器,我突然想把他的80->80映射的端口改成80->8080 但是我不想去新启动容器,想在现有容器基础上去修改,或者我想删除某个端口映射(只是大概思路)


如何寻找容器配置文件位置

首先我这边准备了一个容器 

 首先要去这个docker的配置文件目录

1.先找到他的id,因为在配置文件中,每个docker容器都有不同的配置文件,文件目录是以id命名的

docker inspect  nostalgic_mclaren | grep Id
# 这里的nostalgic_mclaren是我的容器名称,要根据指定的容器名称查出来Id号

 然后进入docker的根目录下的containers文件中  (也就是cd /var/lib/docker/containers

然后找到上面对应的id号的文件

上面查到的id号是7a1ec60c588619f094f61053432fa47344a772b6ce363b47a38c285571716c57
那么就是进入到这个文件夹里

cd /var/lib/docker/containers/7a1ec60c588619f094f61053432fa47344a772b6ce363b47a38c285571716c57

然后下面的所有操作,都是在这个目录下执行 

(      /var/lib/docker/containers/容器id号       )

 进来这个文件内

可以找到里边包含这两个文件,config.v2.json ,和,hostconfig.json 

这就是今天用到的两个文件

########################################

                                   附加:

可能会因为docker的根目录被移动的情况,那么根目录就不在/var/lib/docker/containers/

去   cat  /etc/docker/daemon.json    执行前面的命令找到docker root,docker的根目录就有containers文件

######################################## 


首先停止docker服务

systemctl stop docker
systemctl stop docker.socket

编辑hostconfig.json文件 

vi hostconfig.json

进入文件内修改 PortBindings的内容

现在我要加一个80映射80的

我在{}内添加了     "80/tcp":[{"HostIp":"","HostPort":"80"}] 

现在保存退出,然后编辑config.v2.json文件

vi config.v2.json

 ​​​

在ExposedPorts后面加上     "80/tcp":{} 

意思是暴露的端口 

现在保存退出

systemctl daemon-reload
systemctl start docker

重新加载并且启动docker,再启动容器查看 

你可以对比一下最上面的图片,可以清晰看到添加成功 


如果你想再添加一个端口,只需要将他们使用   ,   (逗号)隔开就行

如我想再添加一个1234映射4321,下面我就简单演示一下

systemctl stop docker
systemctl stop docker.socket

vi hostconfig.json 

vi config.v2.json

systemctl daemon-reload
systemctl start docker

这样就添加了第二个 


现在再进入到指定的容器目录下,再找到config.v2.json,和hostconfig.json两个文件

现在我要把80->80给他删了

systemctl stop docker
systemctl stop docker.socket
vi hostconfig.json

找到PortBindings段 

我要删80->80

所以我要把     ,"80/tcp":[{"HostIp":"","HostPort":"80"}]      删掉(注意,我这个是排在第二个所以要把,加上   并且注意外部的}不要多删了)

(下面这个是修改后的)

vi config.v2.json

找到ExposedPorts段 

 删除   ,"80/tcp":{}   和上面意思一样

 

systemctl daemon-reload
systemctl start docker

现在80->80就没了


目前就剩下了一个4321->1234

现在我要把他改成4321->80

systemctl stop docker
systemctl stop docker.socket
vi hostconfig.json

进入文件内修改 PortBindings的内容

 将

"1234/tcp":[{"HostIp":"","HostPort":"4321"}]

改为

"80/tcp":[{"HostIp":"","HostPort":"4321"}]

这样就修改完了

 

vi config.v2.json

 找到ExposedPorts段 

"1234/tcp":{}

改为

"80/tcp":{}

就可以了 

 

 

修改成功 


最基础的可以通过

docker ps -a

 查看指定的容器是否进行了改动

再有就是查看config.v2.jsonhostconfig.json两个文件的指定段

查看是否修改成功

########################################

附加:

有时你明明修改了,但是一查看修改后的文件,他又变回原来的文件内容了,也就是说你改了但是内容又变回去了,导致问题出现的原因可能是,没有关闭docker服务,没有systemctl daemon-reload

########################################

 


网站公告

今日签到

点亮在社区的每一天
去签到