首先我的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.json和hostconfig.json两个文件的指定段
查看是否修改成功
########################################
附加:
有时你明明修改了,但是一查看修改后的文件,他又变回原来的文件内容了,也就是说你改了但是内容又变回去了,导致问题出现的原因可能是,没有关闭docker服务,没有systemctl daemon-reload
########################################