Docker修改已有容器的端口映射
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.hashhostconfig.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修改已有容器的端口映射的更多相关文章
- Docker修改已创建容器端口映射
修改已创建容器端口映射. 通过编辑 hostconfig.json 文件来修改 Docker 容器的端口映射 该文件地址:/var/lib/docker/containers/[hash_of_the ...
- 如何修改Docker已运行实例的端口映射
如何修改Docker已运行实例的端口映射 Docker的端口映射,往往出现在两个阶段需要处理: 1.是在docker启动前就已经确定好,哪个docker实例映射哪个端口(往往这个情况比较,需要提前做规 ...
- 如何修改运行中的docker容器的端口映射和挂载目录
在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...
- 教你如何修改运行中的docker容器的端口映射
在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...
- [转帖]教你如何修改运行中的docker容器的端口映射
教你如何修改运行中的docker容器的端口映射 在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当dock ...
- 如何修改运行中的docker容器的端口映射
在docker run创建并运行容器的时候,可以通过-p指定端口映射规则.但是,我们经常会遇到刚开始忘记设置端口映射或者设置错了需要修改.当docker start运行容器后并没有提供一个-p选项或设 ...
- docker容器的端口映射
1.创建一个Nginx 容器,先不映射端口 [root@localhost ~]# docker run --name my_nginx -d nginx 7be3673a4c0f8f7ffe79a7 ...
- 修改docker容器的端口映射
大家都知道docker run可以指定端口映射,但是容器一旦生成,就没有一个命令可以直接修改.通常间接的办法是,保存镜像,再创建一个新的容器,在创建时指定新的端口映射. 有没有办法不保存镜像而直接修改 ...
- 修改已经创建的docker容器的端口映射
原始链接:https://stackoverflow.com/questions/19335444/how-do-i-assign-a-port-mapping-to-an-existing-dock ...
- Docker(33)- 如何修改 docker 容器的端口映射
如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 问题背景 docker run ...
随机推荐
- jmeter接口自动化-通过csv文件读取用例并执行测试
最近在公司测试中经常使用jmeter这个工具进行接口自动化,简单记录下~ 一.在csv文件中编写好用例 首先在csv文件首行填写相关参数(可根据具体情况而定)并编写测试用例.脚本可通过优先级参数控制执 ...
- 【HarmonyOS】【ArkUI】在Service中使用Emitter
参考资料 1.相关基础知识:触发器Emitter2.启动服务:ServiceAbility开发 开发步骤 第一步:开发界面,界面内容由一个按钮组件+文本组件构成,然后在按钮组件中添加点击事件,开启 ...
- 【笔记】CF1251E Voting 及相关
题目传送门 贪心: 一个人 \(i\) 要投票,两种情况:花钱,或当前的人数达到了 \(m_i\). 而当前达到 \(m_i\) 的话所有 \(m_j \le m_i\) 也就达到要求了. 所以考虑将 ...
- Java新特性(2):Java 10以后
您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来- 虽然到目前为止Java的版本更新还没有什么惊天动地的改变,但总是会冒出一些有趣的小玩意.前面列举了Java9和Java10的一些特色,现在接着来 ...
- 使用vite + vue3 + ant-design-vue + vue-router + vuex 创建一个管理应用
使用vite + vue3 + ant-design-vue + vue-router + vuex 创建一个管理应用的记录 使用vite 创建项目 我创建的node 版本是 v16.17.1 使用N ...
- Kubernetes_Deployment全解析(无状态的Pod)
前言 一.创建Deployment 1.1 创建Deployment apiVersion: apps/v1 kind: Deployment metadata: name: nginx-deploy ...
- 关于windows上开启远程桌面连接不上的问题解决
解决办法 启用远程桌面连接(计算机-属性-远程设置) 选择第二个:允许运行任意版本远程桌面 关闭防火墙(或者给远程桌面添加端口3389放行也可以) 创建用户以及密码 这里注意,一定要建立密码,只有账号 ...
- Vue2基本组件间通信
Vue2组件通信的基础方式 自己的理解:组件化通信,无非就是数据你传我,我传你,两个组件的相互交流,方法很多,下方有图示(此篇建议小白阅读,大神的话也不会看,哈哈哈哈!仅供参考,有不同的意见可以一起交 ...
- 【每日一题】2021年12月6日-剑指 Offer 22. 链表中倒数第k个节点
输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点. 例如,一个链表有 6 个节点,从头节点开始,它们的值依次是 1.2.3.4.5.6 ...
- java并发数据结构之CopyOnWriteArrayList
CopyOnWriteArrayList是一个线程安全的List实现,其在对对象进行读操作时,由于对象没有发生改变,因此不需要加锁,反之在对象进行增删等修改操作时,它会先复制一个对象副本,然后对副本进 ...