怎么给运行中的docker容器添加新的端口

本文介绍两种在Docker中实现容器端口映射的方法:一是使用iptables进行端口转发,二是通过提交运行中的容器为镜像并重新运行来添加端口映射。适用于需要对已运行容器进行端口配置调整的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

https://blog.youkuaiyun.com/zuoshenglo/article/details/78402772

 

简单的说,2种。

iptables 端口转发,commit 容器为一个images,重新运行一个新的容器

 

DOCKER 给运行中的容器添加映射端口

方法1

1、获得容器IP

container_name 换成实际环境中的容器名

docker inspect `container_name` | grep IPAddress
  • 1

2、 iptable转发端口

将容器的8000端口映射到docker主机的8001端口

iptables -t nat -A  DOCKER -p tcp --dport 8001 -j DNAT --to-destination 172.17.0.19:8000
  • [root@lixl appinstall]# iptables -t nat -A  DOCKER -p tcp --dport 18001 -j DNAT --to-destination 172.17.0.1:2181
    [root@lixl appinstall]# iptables -t nat -A  DOCKER -p tcp --dport 18003 -j DNAT --to-destination 172.17.0.3:2181
    [root@lixl appinstall]# iptables -t nat -A  DOCKER -p tcp --dport 18006 -j DNAT --to-destination 172.17.0.6:2181

方法2

1.提交一个运行中的容器为镜像

docker commit containerid foo/live
  • 1

2.运行镜像并添加端口

docker run -d -p 8000:80  foo/live /bin/bash
### 动态为运行中的Docker容器添加端口映射 在 Docker 中,默认情况下,`docker run` 命令用于创建并启动一个新的容器,并允许通过 `-p` 参数指定端口映射关系。然而,在某些场景下,可能需要对已经运行容器动态添加新的端口映射。 #### 方法概述 尽管 `docker run` 是最常见的端口映射方式[^3],但对于已经在运行容器,可以借助 `docker port` 和 `docker update` 的组合来间接实现动态端口映射的效果。不过需要注意的是,Docker 并未提供直接修改已运行容器端口映射的功能,因此通常采用以下替代方案: --- #### 方法一:重启容器以应用新的端口映射 如果容器支持重启动而不会影响服务状态,则可以通过以下步骤完成端口映射更: 1. **停止正在运行容器** 使用以下命令停止目标容器: ```bash docker stop <container_id> ``` 2. **删除旧容器实例** 删除当前容器以便重建它(注意保存数据卷以防丢失重要数据): ```bash docker rm <container_id> ``` 3. **基于原镜像重创建容器并附加端口映射** 创建带有额外端口映射的容器: ```bash docker run -d --name=<new_container_name> \ -p <existing_host_port>:<existing_container_port> \ -p <new_host_port>:<new_container_port> \ <original_image_name> ``` 4. **验证端口映射是否生效** 运行以下命令确认增加的端口已被正确绑定到宿主机上: ```bash docker ps | grep <new_container_name> ``` 此方法适用于大多数情况下的生产环境调整需求。 --- #### 方法二:利用网络模式共享宿主机端口 另一种解决办法是切换至 `--network="host"` 模式运行容器。在这种模式下,容器会直接继承宿主机上的所有开放端口,无需显式声明任何特定范围内的映射规则。但是要注意该选项仅限 Linux 系统可用,并且可能会带来潜在的安全隐患由于缺乏隔离机制所致[^2]。 执行如下指令即可启用 Host Networking Mode : ```bash docker run -it --net=host alpine ash ``` 对于已有处于其他默认桥接网卡 (bridge network) 下工作的实例来说 , 可尝试将其迁移到自定义 bridge 或者 macvlan 类型子网里去 ,从而获得更灵活可控权限分配策略的同时保留原有功能特性不变 。 --- #### 注意事项 无论采取哪种途径都需要权衡利弊得失 。 如果频繁变更端口设置的话建议考虑自动化工具如 Kubernetes 来简化流程提高效率 同时也要记得做好充分测试工作确保改动无误后再推广上线正式环境中使用 [^4]. ---
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值