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. python 队列(QUEUE)

    QUEUE python中多线程编程的数据结构 基本FIFO队列 class Queue.Queue(maxsize=0) 先进先出,maxsize为队列中能存放的数据个数上限. import Que ...

  2. getAddress和getHostAddress的区别

    getAddress方法和getHostAddress类似,它们的唯一区别是getHostAddress方法返回的是字符串形式的IP地址,而getAddress方法返回的是byte数组形式的IP地址.

  3. [C++] - GCC和LLVM对方法 warning: non-void function does not return a value [-Wreturn-type] 的处理差异

    最近做一个C++开源项目发现一个奇怪问题,通过clang编译链接执行程序每到有一个就崩溃了,gcc下则没有此问题. 后来通过调试,发现原因是bool返回的方法是没有return语句!问题是为啥还能通过 ...

  4. 2022-11-13 Acwing每日一题

    本系列所有题目均为Acwing课的内容,发表博客既是为了学习总结,加深自己的印象,同时也是为了以后回过头来看时,不会感叹虚度光阴罢了,因此如果出现错误,欢迎大家能够指出错误,我会认真改正的.同时也希望 ...

  5. Centos 7.6 安装部署 openGauss 3.1.0 企业版一主两备集群

    一.安装环境设置 1.1 硬件环境 名称 最低配置 建议配置 测试配置 服务器数量 3 略 略 硬盘 * 至少1GB用于安装openGauss的应用程序.* 每个主机需大约300MB用于元数据存储.* ...

  6. 06#Web 实战:实现可滑动的标签页

    实现效果图 本随笔只是记录一下大概的实现思路,如果感兴趣的小伙伴可以通过代码和本随笔的说明去理解实现过程.我的 Gitee 和 GitHub 地址.注意哦:这个只是 PC 上的标签页,手机端的没用,因 ...

  7. CodeGeeX:vscode中全新的智能代码补全插件

    大家好我是费老师,代码智能补全是近几年非常热门的话题,有前不久宣告项目终结的kite,反响平平的tabnine,以及最近吃了一堆官司的copilot. 而广大从事编程工作的用户只关心市面上的代码智能补 ...

  8. day33 过滤器filter & 监听器listener & 利用反射创建BaseServlet实现调用自定义业务方法

    Filter过滤器 Fileter可以实现: 1)客户端的请求访问servlet之前拦截这些请求,对用户请求进行预处理 2)对HttpServletResponse进行后处理: 注意 多个Filter ...

  9. VSCode解决Python中空格和制表符混用报错

    Python对缩进的要求非常严格,缩进控制不正确可能会造成代码执行不正确甚至报错. 遇到报错"TabError: inconsistent use of tabs and spaces in ...

  10. 一文速览 Dubbo 3.0

    本文将带你快速了解 Dubbo3 的设计背景.总体架构与核心特性.与典型用户如阿里巴巴 HSF2 的关系等.也可以通过如下部分了解更多: 小白用户,快速浏览 Dubbo3 核心特性: 下一代通信协议 ...