Docker修改已有容器的端口映射

背景

  • 拉取了jenkins的镜像,启动容器的时候端口就映射了8080,但这个演示环境要用到jenkins node,其中默认的代理端口是50000.漏了,就想着能否不重新弄一个容器,修改下配置或者命令行增加下port映射即可。

实践

  • 当前端口
# 启动命令
docker run -id --name=sqjenkins -p 8083:8080 -v /var/jenkins_node:/var/jenkins_home --restart=always jenkins/jenkins

# 查看当前容器
[root@hecs-67651 var]# docker ps -a
CONTAINER ID   IMAGE             COMMAND                  CREATED       STATUS             PORTS                                                  NAMES
4a190f585202   jenkins/jenkins   "/usr/bin/tini -- /u…"   2 hours ago   Up About an hour   50000/tcp, 0.0.0.0:8083->8080/tcp, :::8083->8080/tcp   sqjenkins


# 端口映射

[root@hecs-67651 var]# docker port 4a19
8080/tcp -> 0.0.0.0:8083
8080/tcp -> :::8083


  • 获取容器完整的id
[root@hecs-67651 var]# docker inspect 4a19|grep Id
      "Id": "4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03",

  • 在/var/lib/docker/containers下找到这个目录
cd /var/lib/docker/containers/4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03
  • 停止容器
[root@hecs-67651 ~]# docker stop 4a
4a
  • 确认有个json文件

    • 文件
[root@hecs-67651 4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03]# ls -l
total 164
-rw-r----- 1 root root 126317 Aug 10 14:45 4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03-json.log
drwx------ 2 root root   4096 Aug 10 12:29 checkpoints
-rw------- 1 root root   4107 Aug 10 14:44 config.v2.json
-rw-r--r-- 1 root root   1602 Aug 10 14:44 hostconfig.json
-rw-r--r-- 1 root root     13 Aug 10 14:44 hostname
-rw-r--r-- 1 root root    174 Aug 10 14:44 hosts
drwx--x--- 2 root root   4096 Aug 10 12:29 mounts
-rw-r--r-- 1 root root    143 Aug 10 14:44 resolv.conf
-rw-r--r-- 1 root root     71 Aug 10 14:44 resolv.conf.hash
  • hostconfig.json 示例(已美化过)
{
    "Binds": ["/var/jenkins_node:/var/jenkins_home"],
    "ContainerIDFile": "",
    "LogConfig": {
        "Type": "json-file",
        "Config": {}
    },
    "NetworkMode": "default",
    "PortBindings": {
        "8080/tcp": [{
            "HostIp": "",
            "HostPort": "8083"
        }]
    ... 省略
}
- 最好备份下这2个json文件

- 修改前的内容
"PortBindings":{"8080/tcp":[{"HostIp":"","HostPort":"8083"}]}
- 修改后的内容
"PortBindings":{"50000/tcp":[{"HostIp":"","HostPort":"50000"}],"8080/tcp":[{"HostIp":"","HostPort":"8083"}]},
  • config.v2.json 示例(已美化过),此处并不需要修改(看里面已经有)
{
    "StreamConfig": {},
    "State": {
        "Running": false,
        "Paused": false,
        "Restarting": false,
        "OOMKilled": false,
        "RemovalInProgress": false,
        "Dead": false,
        "Pid": 0,
        "ExitCode": 143,
        "Error": "",
        "StartedAt": "2022-08-10T04:52:46.192830223Z",
        "FinishedAt": "2022-08-10T06:37:16.759288228Z",
        "Health": null
    },
    "ID": "4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03",
    "Created": "2022-08-10T04:29:21.506586162Z",
    "Managed": false,
    "Path": "/usr/bin/tini",
    "Args": ["--", "/usr/local/bin/jenkins.sh"],
    "Config": {
        "Hostname": "4a190f585202",
        "Domainname": "",
        "User": "jenkins",
        "AttachStdin": false,
        "AttachStdout": false,
        "AttachStderr": false,
        "ExposedPorts": {    //注意此处已经在容器中暴露了端口,所以无需增加
            "50000/tcp": {},
            "8080/tcp": {}
        },
        ... 省略
}

  • 修改完毕(容器是停止状态),你需要重启docker(如果你有其他的容器就比较麻烦),我试过重启容器,始终无效。
systemctl restart docker
  • 再次查看端口映射发现已经增加了
[root@hecs-67651 ~]# docker port 4a
50000/tcp -> 0.0.0.0:50000
50000/tcp -> :::50000
8080/tcp -> 0.0.0.0:8083
8080/tcp -> :::8083

总结

  • 要重启docker本身
  • config.v2.json hostconfig.json两个文件的内容
  • 修改的时候要注意格式
  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wuxianfeng023

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值