docker修改已有容器的端口映射
1.需求
之前我在我的nas上部署了一个centos容器,当时脑子抽了,没想起来要多映射几个端口。只映射了容器的22端口(ssh)
对于应用开发而言,没有能够直接访问的端口可太蛋疼了。在centos里面开frp穿透出来访问吧,又太麻烦。
如果在绿联的控制台里面修改端口隐射,会直接创建一个新的容器,原有容器的信息会丢失。现在这个centos系统已经用了一段时间了,开发环境都配置好了。创建一个新容器就是得重头配置,虽然不是啥难事,但是太耗时间了!!!😥
于是就想着,能否通过修改配置文件的方式,实现修改容器的端口映射。
2.操作
2.1 开启ssh并关闭docker服务
修改之前,需要开启绿联nas的ssh服务。绿联nas如何开启ssh参考 视频
链接上ssh之后,先使用docker ps
,查看需要修改容器的id。注意,这里的id并不是完整的容器id,先记录下来。
图中也能看到,当前这个centos容器只映射了22端口
进入绿联的客户端,关闭docker服务
命令行里面再次执行docker ps
,确认docker服务确实已经关闭
1 | $ docker ps |
如果显示如上,则代表docker并没有在运行。
2.2 找到docker安装路径
接下来要做的,就是查看docker安装的位置。对于群晖、威联通、绿联这种nas而言,其系统内对docker安装挂载的位置是不同的。比如绿联的nas自带了16gb的闪存,但docker的安装位置并不在这里面。
一般的centos系统(以我的云服务器为例),docker的安装位置应该是如下路径
1 | /var/lib/docker |
ls查看内部文件,如下
1 | # ls /var/lib/docker |
而绿联的系统并没有这个路径
1 | can't open '/var/lib/docker': No such file or directory |
查看/var/lib
,并没有发现docker文件夹
1 | # ls /var/lib/ |
查看/var
,发现了一个dockerd,猜测这是docker相关文件存放的位置
1 | # ls /var |
里面只有一个json文件
1 | # ls /var/dockerd |
cat命令查看,果不其然,是docker的安装路径
1 | # cat /var/dockerd/daemon.json |
这就是docker的安装位置了
1 | /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6 |
ls查看,文件结构和云服务器的docker安装位置基本一样,这代表我们找对了!
1 | # ls /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6 |
2.3 找到对应容器的配置文件路径
docker路径下的containers
文件夹,包含了不同容器的配置文件夹。ls查看,发现都是一些看不懂的字符串。实际上,这里的字符串就是容器的id
1 | # ls /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6/containers |
前面提到,docker ps
显示的容器id并不是完整的。因为完整的很长很长,不可能在ps命令里面全显示出来。
我需要修改的目标容器,缩短的id如下,对应的正是containers
文件夹里面的第一个文件夹
1 | 2b8f29d7b4b0 |
看看这个文件夹里面有啥东西
注意:此时命令已经很长很长。避免出错,建议开个记事本,在里面把命令写好,再复制到终端中执行!
1 | ls -l /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6/containers/2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf |
得到的文件结构如下,我们需要修改的是config.v2.json
和hostconfig.json
1 | -rw-r----- 1 root root 87802 Mar 11 18:12 2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf-json.log |
2.4 备份
在linux的命令行中操作,备份是必不可少的!使用cp命令,把配置文件复制一份,并在名字中添加上.bak
予以区别
1 | cp 源文件 目标文件 |
以下是cp命令备份config.v2.json
文件的命令示例
1 | cp /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6/containers/2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf/config.v2.json /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6/containers/2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf/config.v2.bak.json |
备份了我们需要修改的两个文件后,接下来就是修改配置文件了
2.5 修改配置文件
2.5.1 hostconfig.json
使用vim来进行编辑(编辑之前,可以用cat先复制出内容,放到vsc等编辑器中格式化,方便找到对应的位置)
1 | vim /mnt/media_rw/2550c297-7334-455f-9fce-e0a00aad40c8/.ugreen_nas/6/containers/2b8f29d7b4b0ad624fb02048cb91c569e6e52409fe246e1c741bdd13ed7242cf/hostconfig.json |
如下便是要修改的字段,可以看到里面只有对22端口的映射
1 | "PortBindings": { |
我们照猫画虎,直接添加上另外两个端口的映射。
在英文输入法下,按i
进入vim的编辑模式,通过键盘移动光标到指定位置,修改文件
1 | "PortBindings": { |
编辑好了之后,按esc退出编辑模式,:wq
保存并退出
2.5.2 config.v2.json
这个文件需要修改的是如下字段
1 | "ExposedPorts": { |
添加上刚刚在hostconfig.json
里面新增的端口
1 | "ExposedPorts": { |
同样:wq
保存并退出
2.6 现在就已经修改好啦!
相同的位置还可以修改容器的hostname。
用docker安装的centos镜像,是不能在centos系统中修改容器hostname的(修改可以,但是不会生效)
3.重启docker,查看是否修改成功
在客户端里面重启docker服务之后,使用docker ps命令查看端口映射是否修改成功
可以看到,多出了50000和50001端口,修改成功!
- 本文标题:【docker】通过配置文件,修改已有容器的端口映射
- 创建时间:2023-03-11 19:45:33
- 本文链接:posts/1996139841/
- 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!