Docker容器端口映射规则调整方案

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 创建宿主机与容器的端口映射,可以在docker run创建并运行容器的时候,通过-p指定端口映射规则。但是,我们也经常遇到创建容器时缺少部分端口映射,或者设置错了需要修改的情况。docker start运行容器后,并没有提供一个选项或设置可以修改指定的端口映射规则。那么这种情况我们该怎么处理呢?

1.概述

 Docker提供三种用户自定义(user-defined)的网络驱动:bridge,overlay和macvlan。通常,我们使用的是Docker默认的网络模式Bridge模式,bridge模式可以将各个容器的端口设为对立的,这样外部宿主机或者容器需要通过该容器所在ip+该容器的端口进行访问,并且本宿主机可以访问本宿主机中的容器。
 创建宿主机与容器的端口映射,需要在docker run创建并运行容器的时候,通过-p指定端口映射规则。但是,我们也经常遇到创建容器时忘记设置端口映射,或者设置错了需要修改的情况。docker start运行容器后,并没有提供一个选项或设置可以修改指定的端口映射规则。那么这种情况我们该怎么处理呢?本文将以Mac for DockerDesktop为例进行说明。

2.解决方案

2.1.重建容器

 这种方法比较简单直接,即删除原有的缺少端口映射的容器,重新创建一个指定端口映射规则的容器。
 由于此方案需要重建容器,所以仅适用于创建镜像后还没开始配置或容器配置简单、配置成本较小的情况。

2.2.修改配置文件

 通过修改配置文件hostconfig.json和config.v2.json,可以实现docker容器端口映射规则的修改,具体操作步骤如下。

  • 1.确定容器ID
docker container inspect $ContainerName |grep Id
或者
docker inspect $ContainerName |grep Id 

示例:
image.png

  • 2.停止容器
docker stop $ContainerName

示例:
image.png

  • 3.停止docker服务
     以Mac for Docker Desktop为例,示例如下:

image.png

  • 4.进入docker容器配置文件所在目录
cd ~/Library/Containers/com.docker.docker/Data/vms/0/
  • 5.进入Docker内部Linux
     容器配置文件所在目录中有一个tty文件,通过这个文件可以登录docker内部的Linux。
screen tty 
遇到空白命令行,直接回车即可。 
  • 6.进入容器对应文件夹
cd /var/lib/docker/containers/
cd $ContainerId

示例:
image.png

 如上图所示,容器对应目录内包含config.v2.json和hostconfig.json两个配置文件,下一步分别对两个文件进行修改即可(务必都进行修改)。

  • 7.编辑修改config.v2.json

    • a.执行如下命令查看config.v2.json
cat /var/lib/docker/containers/{容器id}/config.v2.json

image.png

  • b.本地进行json格式化,虽然config.v2.json是json文件,但没有格式化,所以在本地对齐进行格式化,方便参数修改。
  • c.编辑ExposedPorts和Ports参数,参考之前内容或如下格式添加端口映射。
    image.png

image.png

  • d.添加完成后,将文件内容压缩成一行并覆盖写入config.v2.json即可。
  • 8.编辑修改hostconfig.json
     操作步骤同上,需要修改的参数为PortBindings,添加内容示例如下,端口配置之间用英文字符逗号隔开。

image.png

  • 9.退出docker的虚拟Linux
     这一步很关键,如果没有正常退出,配置文件将无法覆盖旧文件,修改无法生效。

    • a.按Ctrl+A+D,退出screen命令。
    • b.使用screen -ls命令,查看当前会话。
      image.png
    • c.使用kill命令,杀死当前会话。
    • d.退出会话
screen -wipe 
There is a screen on: 
    41557.ttys004.YandeMacBook-Pro  (Removed) 
1 socket wiped out. 
No Sockets found in /var/folders/d0/y2ythxgd2p54y1p46bv90wpm0000gn/T/.screen. 
  • 10.重启docker
     重新启动Mac for DockerDesktop,并启动容器。
docker start $ContainerName

2.3.构建自定义镜像

 通过docker commit将原有容器及容器中的文件、配置信息commit为新的自定义镜像,然后再通过这个自定义镜像创建容器。在docker run创建并运行容器的时候,通过-p指定所需的端口映射规则,具体操作如下。

  • 1.停止原有docker容器。
docker stop $ContainerName
  • 2.提交原有docker容器为自定义镜像。
docker commit [OPTIONS] $container [REPOSITORY[:TAG]]
OPTIONS说明:
-a :提交的镜像作者;
-c :使用Dockerfile指令来创建镜像;
-m :提交时的说明文字;
-p :在commit时,将容器暂停。

image.png

  • 3.基于自定义镜像创建容器
docker run -it --name $new_containername -p 80:80 $imagename:tag

 到这里,添加指定端口映射的新容器就可以使用了。

3.总结

 综上,以上三种方式均可实现为运行中的容器调整端口映射规则,三种方式的优劣对比如下:

  • 优势

    • 通过删除原有容器并重建新容器的方式实现调整端口,操作简单、直接。
    • 修改配置文件的方式没有副作用,无需重新配置容器。
    • 通过构建自定义镜像、重建容器的的方式,操作简单且不会影响同一宿主机上的其他容器。
  • 劣势

    • 方案1重建容器后需要重新配置容器,比较麻烦。
    • 方案2修改配置文件后,需要重启整个docker服务,如果在同一个宿主机上运行着多个容器服务的话,会影响其他容器服务。
    • 方案3实现方式曲折,在管理上会略显混乱。
相关文章
|
2天前
|
监控 NoSQL 时序数据库
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
《docker高级篇(大厂进阶):7.Docker容器监控之CAdvisor+InfluxDB+Granfana》包括:原生命令、是什么、compose容器编排,一套带走
116 77
|
3天前
|
数据建模 应用服务中间件 nginx
docker替换宿主与容器的映射端口和文件路径
通过正确配置 Docker 的端口和文件路径映射,可以有效地管理容器化应用程序,确保其高效运行和数据持久性。在生产环境中,动态替换映射配置有助于灵活应对各种需求变化。以上方法和步骤提供了一种可靠且易于操作的方案,帮助您轻松管理 Docker 容器的端口和路径映射。
26 3
|
10天前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
38 6
|
10天前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
20 5
|
10天前
|
开发框架 安全 开发者
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。
Docker 是一种容器化技术,支持开发者将应用及其依赖打包成容器,在不同平台运行而无需修改。本文探讨了 Docker 在多平台应用构建与部署中的作用,包括环境一致性、依赖管理、快速构建等优势,以及部署流程和注意事项,展示了 Docker 如何简化开发与部署过程,提高效率和可移植性。
31 3
|
10天前
|
存储 安全 数据安全/隐私保护
Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。
在数字化时代,Docker 容器化应用管理更加高效,但数据安全和业务连续性成为关键。本文探讨了 Docker 应用的备份与恢复策略,涵盖备份的重要性、内容、方法及常见工具,制定备份策略,恢复流程及注意事项,并通过案例分析和未来趋势展望,强调备份与恢复在保障应用安全中的重要性。
20 2
|
15天前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
46 5
|
13天前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
31 0
|
3月前
|
Linux Docker 容器
Docker操作 :容器命令
Docker操作 (四)
204 56
|
2月前
|
安全 Shell Linux
docker进入容器命令
docker进入容器命令