win10 docker 容器修改端口映射

本文详细介绍了如何在Docker中修改已创建容器的端口映射,包括通过PowerShell查找容器ID,编辑config.v2.json和hostconfig.json文件来暴露和映射端口,以及重启Docker验证效果的步骤。

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

通常容器生成后是无法通过docker界面或docker命令去修改端口映射的,以下是通过修改配置文件的方式实现:

第一步:在powershell执行以下命令找到容器hash值

docker inspect 容器名称

第二步: 打开文件管理器,在地址栏输入以下内容回车

\\wsl$\docker-desktop-data\version-pack-data\community\docker\containers\[容器hash值]

第三步:修改config.v2.json,比如我要暴露容器的22端口到宿主机,那么将 "ExposedPorts":{"22/tcp":{}} 加入到 "try" 属性前,然后保存。

第四步: 修改hostconfig.json,比如我要将容器22端口映射到宿主机的10022端口,那么在PortBindings属性里添加 "22/tcp":[{"HostIp":"","HostPort":"10022"}]。

第五步:重新启动docker,检查是否生效 

### 如何在 Docker Desktop 中为容器添加端口映射 为了在 Windows 平台上的 Docker Desktop 容器中配置新增端口映射,可以通过手动编辑容器的配置文件来完成这一操作。以下是具体的操作说明: #### 查找容器 ID 和配置文件位置 1. 启动 Docker Desktop,并通过命令 `docker ps` 获取正在运行的容器列表及其对应 ID 或名称。 2. 使用快捷键 **Win+R** 输入 `\\wsl$` 进入 WSL 文件系统,在左侧导航至 `\wsl$\docker-desktop-data\data\docker\containers\[hash_of_the_container]`[^4]。如果无法找到上述路径,则可以直接搜索容器 ID 来定位其所在目录。 #### 编辑配置文件 一旦找到了目标容器所在的文件夹,需修改以下两个主要配置文件: - **config.v2.json**: 在该文件内的 `"ExposedPorts"` 字段下声明需要开放的新端口号。例如,假设希望暴露一个新的 TCP 协议下的 80 端口,则应将其设置如下: ```json { "ExposedPorts": { "22/tcp": {}, "80/tcp": {} } } ``` - **hostconfig.json**: 接下来定义主机与容器之间具体的端口绑定关系。同样以上述例子为例,“PortBindings” 应当更新为下面的形式以把宿主机的 9080 映射到容器内部的 80 上面去: ```json { "PortBindings": { "22/tcp": [ { "HostIp": "", "HostPort": "5000" } ], "80/tcp": [ { "HostIp": "", "HostPort": "9080" } ] } } ``` #### 保存更改并应用新设定 完成所有必要的调整之后,请务必关闭当前打开的所有涉及这些改动的应用程序窗口(特别是 Docker Desktop 自身),随后重新启动 Docker Desktop 让刚才所做的变更生效[^3]。 值得注意的是,这种方法虽然有效但也存在一定的局限性和风险;比如不当操作可能导致数据丢失或者其他不可预见的问题发生。因此建议仅当确实有必要时才采用这种方式处理端口映射需求。 ```python import json # 示例代码展示如何解析 JSON 数据结构 def update_port_mapping(config_path, host_config_path): with open(config_path, 'r') as f: config_data = json.load(f) if not isinstance(config_data.get('ExposedPorts'), dict): config_data['ExposedPorts'] = {} new_exposed_ports = {"80/tcp": {}} config_data["ExposedPorts"].update(new_exposed_ports) with open(host_config_path, 'r') as hf: host_config_data = json.load(hf) port_bindings = host_config_data.setdefault("PortBindings", {}) updated_binding = {"80/tcp": [{"HostIp": "", "HostPort": "9080"}]} port_bindings.update(updated_binding) # 将修改后的JSON写回原文件 with open(config_path, 'w') as fw: json.dump(config_data, fw, indent=2) with open(host_config_path, 'w') as hfw: json.dump(host_config_data, hfw, indent=2) ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

压码路

如果帮到你,可以意思一下吗?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值