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"
        }]
        },
        "RestartPolicy": {
        "Name": "always",
        "MaximumRetryCount": 0
        },
        "AutoRemove": false,
        "VolumeDriver": "",
        "VolumesFrom": null,
        "CapAdd": null,
        "CapDrop": null,
        "CgroupnsMode": "host",
        "Dns": [],
        "DnsOptions": [],
        "DnsSearch": [],
        "ExtraHosts": null,
        "GroupAdd": null,
        "IpcMode": "private",
        "Cgroup": "",
        "Links": null,
        "OomScoreAdj": 0,
        "PidMode": "",
        "Privileged": false,
        "PublishAllPorts": false,
        "ReadonlyRootfs": false,
        "SecurityOpt": null,
        "UTSMode": "",
        "UsernsMode": "",
        "ShmSize": 67108864,
        "Runtime": "runc",
        "ConsoleSize": [0, 0],
        "Isolation": "",
        "CpuShares": 0,
        "Memory": 0,
        "NanoCpus": 0,
        "CgroupParent": "",
        "BlkioWeight": 0,
        "BlkioWeightDevice": [],
        "BlkioDeviceReadBps": null,
        "BlkioDeviceWriteBps": null,
        "BlkioDeviceReadIOps": null,
        "BlkioDeviceWriteIOps": null,
        "CpuPeriod": 0,
        "CpuQuota": 0,
        "CpuRealtimePeriod": 0,
        "CpuRealtimeRuntime": 0,
        "CpusetCpus": "",
        "CpusetMems": "",
        "Devices": [],
        "DeviceCgroupRules": null,
        "DeviceRequests": null,
        "KernelMemory": 0,
        "KernelMemoryTCP": 0,
        "MemoryReservation": 0,
        "MemorySwap": 0,
        "MemorySwappiness": null,
        "OomKillDisable": false,
        "PidsLimit": null,
        "Ulimits": null,
        "CpuCount": 0,
        "CpuPercent": 0,
        "IOMaximumIOps": 0,
        "IOMaximumBandwidth": 0,
        "MaskedPaths": ["/proc/asound", "/proc/acpi", "/proc/kcore", "/proc/keys", "/proc/latency_stats", "/proc/timer_list", "/proc/timer_stats", "/proc/sched_debug", "/proc/scsi", "/sys/firmware"],
        "ReadonlyPaths": ["/proc/bus", "/proc/fs", "/proc/irq", "/proc/sys", "/proc/sysrq-trigger"]
       }
      • 最好备份下这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": {}
        },
        "Tty": false,
        "OpenStdin": true,
        "StdinOnce": false,
        "Env": ["PATH=/opt/java/openjdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin", "LANG=C.UTF-8", "JENKINS_HOME=/var/jenkins_home", "JENKINS_SLAVE_AGENT_PORT=50000", "REF=/usr/share/jenkins/ref", "JENKINS_VERSION=2.363", "JENKINS_UC=https://updates.jenkins.io", "JENKINS_UC_EXPERIMENTAL=https://updates.jenkins.io/experimental", "JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals", "COPY_REFERENCE_FILE_LOG=/var/jenkins_home/copy_reference_file.log", "JAVA_HOME=/opt/java/openjdk"],
        "Cmd": null,
        "Image": "jenkins/jenkins",
        "Volumes": {
        "/var/jenkins_home": {}
        },
        "WorkingDir": "",
        "Entrypoint": ["/usr/bin/tini", "--", "/usr/local/bin/jenkins.sh"],
        "OnBuild": null,
        "Labels": {
        "org.opencontainers.image.description": "The Jenkins Continuous Integration and Delivery server",
        "org.opencontainers.image.licenses": "MIT",
        "org.opencontainers.image.revision": "e6e7014de2cfb18b89672fd814b5702e68d2878b",
        "org.opencontainers.image.source": "https://github.com/jenkinsci/docker",
        "org.opencontainers.image.title": "Official Jenkins Docker image",
        "org.opencontainers.image.url": "https://www.jenkins.io/",
        "org.opencontainers.image.vendor": "Jenkins project",
        "org.opencontainers.image.version": "2.363"
        }
        },
        "Image": "sha256:90ff7cc5bfd1e19083a61cf97d7b4eca2f0c1f0d45acaf3e8f42a33bfc08b3b0",
        "NetworkSettings": {
        "Bridge": "",
        "SandboxID": "44ea05ba1ad2f7a4e8f5c00173962eba594d47607528e6a035a3b4410b5f123c",
        "HairpinMode": false,
        "LinkLocalIPv6Address": "",
        "LinkLocalIPv6PrefixLen": 0,
        "Networks": {
        "bridge": {
        "IPAMConfig": null,
        "Links": null,
        "Aliases": null,
        "NetworkID": "3bd08324422f563ead4b5e4160d8d5b4a450f8f67890bbf3472817058dc1d18b",
        "EndpointID": "",
        "Gateway": "",
        "IPAddress": "",
        "IPPrefixLen": 0,
        "IPv6Gateway": "",
        "GlobalIPv6Address": "",
        "GlobalIPv6PrefixLen": 0,
        "MacAddress": "",
        "DriverOpts": null,
        "IPAMOperational": false
        }
        },
        "Service": null,
        "Ports": null,
        "SandboxKey": "/var/run/docker/netns/44ea05ba1ad2",
        "SecondaryIPAddresses": null,
        "SecondaryIPv6Addresses": null,
        "IsAnonymousEndpoint": false,
        "HasSwarmEndpoint": false
        },
        "LogPath": "/var/lib/docker/containers/4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03/4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03-json.log",
        "Name": "/sqjenkins",
        "Driver": "overlay2",
        "OS": "linux",
        "MountLabel": "",
        "ProcessLabel": "",
        "RestartCount": 0,
        "HasBeenStartedBefore": true,
        "HasBeenManuallyStopped": true,
        "MountPoints": {
        "/var/jenkins_home": {
        "Source": "/var/jenkins_node",
        "Destination": "/var/jenkins_home",
       "RW": true, 
      "Name": "", 
      "Driver": "", 
      "Type": "bind", 
      "Propagation": "rprivate", 
      "Spec": { 
      "Type": "bind", 
      "Source": "/var/jenkins_node", 
      "Target": "/var/jenkins_home" 
      }, 
      "SkipMountpointCreation": false 

      }, 
      "SecretReferences": null, 
      "ConfigReferences": null, 
      "AppArmorProfile": "", 
      "HostnamePath": "/var/lib/docker/containers/4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03/hostname", 
      "HostsPath": "/var/lib/docker/containers/4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03/hosts", 
      "ShmPath": "", 
      "ResolvConfPath": "/var/lib/docker/containers/4a190f5852024ebf6ba6bbd1dd18dca89203a203282d98b3f2885af486cc9a03/resolv.conf", 
      "SeccompProfile": "", 
      "NoNewPrivileges": false, 
      "LocalLogCacheMeta": { 
      "HaveNotifyEnabled": false 

      }
  • 修改完毕(容器是停止状态),你需要重启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两个文件的内容

  • 修改的时候要注意格式

  •  

Docker修改已有容器的端口映射的更多相关文章

  1. Docker修改已创建容器端口映射

    修改已创建容器端口映射. 通过编辑 hostconfig.json 文件来修改 Docker 容器的端口映射 该文件地址:/var/lib/docker/containers/[hash_of_the ...

  2. 如何修改Docker已运行实例的端口映射

    如何修改Docker已运行实例的端口映射 Docker的端口映射,往往出现在两个阶段需要处理: 1.是在docker启动前就已经确定好,哪个docker实例映射哪个端口(往往这个情况比较,需要提前做规 ...

  3. 如何修改运行中的docker容器的端口映射和挂载目录

    在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...

  4. 教你如何修改运行中的docker容器的端口映射

    在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...

  5. [转帖]教你如何修改运行中的docker容器的端口映射

    教你如何修改运行中的docker容器的端口映射   在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当dock ...

  6. 如何修改运行中的docker容器的端口映射

    在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...

  7. docker容器的端口映射

    1.创建一个Nginx 容器,先不映射端口 [root@localhost ~]# docker run --name my_nginx -d nginx 7be3673a4c0f8f7ffe79a7 ...

  8. 修改docker容器的端口映射

    大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改.通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射. 有没有办法不保存镜像而直接修改 ...

  9. 修改已经创建的docker容器的端口映射

    原始链接:https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-dock ...

  10. Docker(33)- 如何修改 docker 容器的端口映射

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...

随机推荐

  1. git 进阶篇

    在git使用时,有时需要在公司内部搭建自己的git服务器,用于内部的版本控制. 从远程服务器到本地 先创建服务器端的空git库,将其clone到本地,再将本地的修改push到服务器端 # step1: ...

  2. Redis管理及监控工具推荐

    推荐一款Redis管理软件.[官网 http://www.redisant.cn/] 功能描述: 1. 键和字段CRUD和glob. 2. 适用于字符串.列表.散列.集合.有序集合. 通过漂亮的用户界 ...

  3. halcon如何识别硬币?

    halcon如何识别硬币? 前言 最近一直在学习halcon,在此做了一个案例,分享给大家,效果图如下: 1.思路分析 通过观察,发现1元,5角,1角,它们在面值的文字描述不一样,硬币显示的花纹不一样 ...

  4. MIT6.828 Lab 1: C, Assembly, Tools, and Bootstrapping

    前置准备 实现机器为VMWare的虚拟机,操作系统为 Debian-11(无桌面版本),内核版本为 5.10.0,指令集为 AMD64(i7 9700K),编译器为 GCC-10 QEMU 虚拟化支持 ...

  5. vue3响应式原理以及ref和reactive区别还有vue2/3生命周期的对比,第二天

    前言: 前天我们学了 ref 和 reactive ,提到了响应式数据和 Proxy ,那我们今天就来了解一下,vue3 的响应式 在了解之前,先复习一下之前 vue2 的响应式原理 vue2 的响应 ...

  6. 【笔面试题目】Java集合相关的面试题-List、Map、Set等

    一.List 1.subList 不会返回新的list对象--与String的subString不同 返回原来list的从[fromIndex,toIndex)之间这一部分的视图,实际上,返回的lis ...

  7. jQuery类库

    jQuery介绍 1. jQuery是一个轻量级的.兼容多浏览器的JavaScript库. 2. jQuery使用户能够更方便地处理HTML Document.Events.实现动画效果.方便地进行A ...

  8. 如何使用OpenCV+MMPEAG打开摄像头,显示的同时推送RTMP流。

    注意,设置中: 代码详解: 1. char* outUrl = "rtmp://localhost/live/livestream"; 这个地址,是AMS(Adeobe Media ...

  9. C#开发的线程池和管理器 - 开源研究系列文章

    上次编写了一个小软件,用于练手及自己的一个小工具集合.今天把其中的线程池和管理器的代码抽取出来,写成一个博文,让需要的朋友能够进行学习和应用. 这个线程管理器包括了3个类库和一个应用程序,见下图: 第 ...

  10. [OpenCV实战]22 使用EigenFaces进行人脸重建

    目录 1 背景 1.1 什么是EigenFaces? 1.2 坐标的变化 2 面部重建 2.1 计算新面部图像的PCA权重 2.2 使用EigenFaces进行面部重建 3 参考 在这篇文章中,我们将 ...