h4ck1nH4ck1n  2024-03-03 15:28 字节时代 隐藏边栏 |   抢沙发  45 
文章评分 0 次,平均分 0.0

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

修改步骤

① 查看container id

使用docker psdocker ps -adocker inspect containerName等方式先获得容器的id
这里我使用inspect

docker inspect mnginx | grep Id

返回的信息如下:

"Id": "27b898aa3e89054dfa5b8c898b01f48b5bb9d59316b8dcb315b63708a702dc9a",

② 进入配置文件

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

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

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

cd Data/vms/0

③ 进入screen

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

docker-desktop:~#

注:如果出现screen is terminating这个提示,请参照下面的问题处理

④ 在screen窗口中进入容器对应文件夹

进入到/var/lib/docker/containers目录

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

我们会看到一些不知所措的文件夹

e29f1684f2d44ba979e1f7c6b3857f54b8eda7987a455a5907605570d8a44e41
e2d21b78fdb03c252bde833e0f0d319c908cb9e4992026eb27bbcc0945a10a12
e5096bceac6e89ff2961928b435c64291cff7bf7eadfbe86eda91751d46739e5
f9c1ca21360b2fd0cc41c1f525bf6e8a0fe5d4efbb0bac1fd88647f0fb92ca8a
fc0a2dfbfe2e7917f5b7e19851366545fe0e56cca86f2c2422240ba78ef99c8b

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

cd 27b898aa3e89054dfa5b8c898b01f48b5bb9d59316b8dcb315b63708a702dc9a && ls

进入后看下文件夹下的内容

27b898aa3e89054dfa5b8c898b01f48b5bb9d59316b8dcb315b63708a702dc9a-json.log
checkpoints
config.v2.json
hostconfig.json
hostname
hosts
mounts
resolv.conf
resolv.conf.hash

⑤ 修改文件内容

需要修改config.v2.jsonhostconfig.json文件对应的端口映射部分

⑴ 修改config.v2.json

通过vi找到要修改的关键字ExposedPorts
原先的内容如下:

"ExposedPorts":{"80/tcp":{}}

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

"ExposedPorts":{"80/tcp":{},"8970/tcp":{}}

修改完之后:wq保存该文件

⑵ 修改hostconfig.json

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

vi hostconfig.json

输入/PortBindings进行查找

原先的内容为

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

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

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

修改完之后:wq保存该文件

⑥ 退出screen

建议在此步骤之前再检查一遍步骤 ⑤ 中的两文件配置

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

⑦ 重启Docker

重启Docker后,启动容器,使用docker ps查看端口是否已经绑定成功,注意是重启Docker App。

如果未成功,回到步骤 ⑤ 看下2个文件是否保存

问题处理

执行screen tty 提示 screen is terminating

执行下面的命令

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

啥也不要改,第一次执行docker会拉取并安装新的image,然后自动进入容器终端

Unable to find image 'justincormack/nsenter1:latest' locally
latest: Pulling from justincormack/nsenter1
5bc638ae6f98: Pull complete
Digest: sha256:e876f694a4cb6ff9e6861197ea3680fe2e3c5ab773a1e37ca1f13171f7f5798e
Status: Downloaded newer image for justincormack/nsenter1:latest

接着执行

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

可以看到,这个命令跟我们上面第④步完全一样,但这个不是screen视图,而是我们的docker容器,找到我们要修改的containerId,进入并修改config.v2.jsonhostconfig.json即可,然后按照⑦重启即可。

PS:如果已经执行过了第一条命令,再修改其他容器的端口只需要启动nsenter1这个容器,再修改对应容器的配置文件即可。

参考资料

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

h4ck1n
H4ck1n 关注:0    粉丝:0
这个人很懒,什么都没写

发表评论

表情 格式 链接 私密 签到

扫一扫二维码分享