一、新增端口

发现开放的端口不够用了,但是还不想重新创建容器咋整

1、查看container id

不管是使用docker ps,docker ps -a,docker inspect containerName哪种方式先获得容器的id,这里我使用inspect

docker inspect  jenkinsdemo | grep Id

返回的信息如下:

"Id": "64f7c751e5df16cbbeccbd8648012ae3ae7d76c443565fd66f99244085773bbf",

或者使用可视化docker直接点击:

Mac下 Docker 动态添加端口_json

便可直接跳出容器id,并进入容器:

Mac下 Docker 动态添加端口_docker_02

 

2、进入配置文件

Mac下Docker容器的配置文件在~/Library/Containers/com.docker.docker目录

cd ~/Library/Containers/com.docker.docker

需要修改的文件在Data/vms/0下

cd Data/vms/0

3、进入screen

在~/Library/Containers/com.docker.docker/Data/vms/0目录下有一个tty文件,在终端键入screen tty进行登录,此时会进入一个screen空白窗口,回车即可

注:如果出现screen is terminating这个提示,请参照下面操作:

docker run -it --privileged --pid=host justincormack/nsenter1

执行上面命令,啥也不要改,第一次执行会进入容器终端,接着执行

cd /var/lib/docker/containers && ls

此时我们会看到一些文件夹:

64f7c751e5df16cbbeccbd8648012ae3ae7d76c443565fd66f99244085773bbf

fdd17afcb6c7fcb78cfc1626935641059476a464cc4de5e1b7db74a9802db3b6

我们使用①中获取的container id,进入到对应的目录

cd 64f7c751e5df16cbbeccbd8648012ae3ae7d76c443565fd66f99244085773bbf && ls

此时可以看到如下内容:

64f7c751e5df16cbbeccbd8648012ae3ae7d76c443565fd66f99244085773bbf-json.log

checkpoints

config.v2.json

hostconfig.json

hostname

hosts

mounts

resolv.conf

resolv.conf.hash

4、修改文件内容

接着修改config.v2.json和hostconfig.json文件对应的端口映射部分

4.1 修改config.v2.json

通过vi找到要修改的关键字ExposedPorts,

原先的内容如下:

ExposedPorts":{"50000/tcp":{},"8080/tcp":{}},

那我们要增加暴露的8000端口,那么就是配置如下:

ExposedPorts":{"50000/tcp":{},"8080/tcp":{},"8000/tcp":{}},

修改完之后保存该文件

4.2 修改hostconfig.json

通过vi找到要修改的关键字PortBindings
原先的内容为

"PortBindings":{"8080/tcp":[{"HostIp":"","HostPort":"8082"}]},

那我们要增加8000端口映射到主机的8000端口,那么配置如下:

"PortBindings":{"8080/tcp":[{"HostIp":"","HostPort":"8082”}]},"8000/tcp":[{"HostIp":"","HostPort":"8000"}]}

修改完之后保存该文件

5、退出screen

输入ctrl+a+c(先按ctrl,再按a,然后按c即可)

二、查看新增结果

命令查看:

$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
64f7c751e5df jenkins/jenkins "/sbin/tini -- /usr/…" 2 weeks ago Up 19 hours 0.0.0.0:8000->8000/tcp, :::8000->8000/tcp, 50000/tcp, 0.0.0.0:8082->8080/tcp, :::8082->8080/tcp jenkinsdemo

 可视化docker查看:

Mac下 Docker 动态添加端口_docker_03