Docker 给已经创建并运行的容器添加端口映射

本文介绍如何从运行中的容器创建新的Docker镜像,并通过端口映射运行该镜像。使用docker commit命令可以指定作者、提交信息等选项。运行镜像时,通过-p参数添加端口映射。

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

创建时没有添加端口映射,通过commit 从容器创建一个新的镜像,重新运行镜像添加端口

docker commit : 从容器创建一个新的镜像。
语法:

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
OPTIONS说明:

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。

1.从一个运行中的容器创建为镜像

docker commit -a "fanzone" -m "a new image" web aaa:v1
docker commit -a "fanzone" -m "a new image" web fanzone/aaa:v1 # 同上

2.运行镜像并添加端口

docker run -it --name web_demo -p 8000:80  aaa:v1  /bin/bash

实例
将容器添加端口映射

-> :~ $ docker commit -a "fanzone" -m "a new image" web fanzone/aaa:v1
sha256:6a9806c884e3577727f92de0344894e526308137e77ed81e3125700d5dac24b9

-> :~ $ docker images
REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE
fanzone/aaa         v1                  6a9806c884e3        About a minute ago   460MB
aaa                 v1                  9dcb0beef39b        5 minutes ago        460MB

-> :~ $ docker run -it --name web_demo -p 8000:80  fanzone/aaa:v1  /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]. ---
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值