Windows平台Docker Desktop自定义本地域名配置方案咨询
问题描述
在Windows系统上使用Docker Desktop运行Docker,执行以下命令启动一个简单服务器:
$ docker run -di -p 1234:80 yahya/example-server
容器可通过localhost:1234正常访问,但希望为其配置仅本地可访问的自定义域名(如api.example.test)。
在虚拟机环境中,通常修改Windows的hosts文件添加映射:
192.168.90.90 api.example.test
但在Docker中尝试指定该IP进行端口转发时出现报错:
$ docker run -di -p 192.168.90.90:1234:80 yahya/example-server docker: Error response from daemon: Ports are not available: exposing port TCP 192.168.90.90:80 -> 0.0.0.0:0: listen tcp 192.168.90.90:80: can't bind on the specified endpoint.
使用Docker Desktop自动添加到hosts文件的10.0.0.7可以成功运行:
$ docker run -di -p 10.0.0.7:1234:80 yahya/example-server
但该方法在多项目场景下会出现端口冲突,询问是否有无需Nginx代理即可使用其他本地IP的方法。
解决方案
1. 报错原因说明
你指定的192.168.90.90并非Windows宿主机上实际配置的网卡IP,Docker无法绑定到一个未存在于本地网卡的IP,因此触发报错。而10.0.0.7是Docker Desktop虚拟网卡的默认IP,属于Docker可识别的网络范围,所以能正常绑定。
2. 无需Nginx的两种可行方法
方法一:给Windows宿主机添加额外静态IP
- 步骤1:添加静态IP
打开Windows控制面板 → 网络和共享中心 → 更改适配器设置 → 右键当前使用的网卡(如WLAN/以太网)→ 属性 → 选择「Internet协议版本4(TCP/IPv4)」→ 属性 → 高级 → 点击「添加」,输入想要的IP(如192.168.90.90)和子网掩码(如255.255.255.0),确认保存。 - 步骤2:绑定该IP运行容器
docker run -di -p 192.168.90.90:80:80 yahya/example-server - 步骤3:修改hosts文件
打开C:\Windows\System32\drivers\etc\hosts,添加一行:
此后直接访问192.168.90.90 api.example.testapi.example.test即可。多项目场景下,可给每个项目分配不同的静态IP(如192.168.90.91、192.168.90.92),每个IP对应一个域名,端口统一用80也不会冲突。
方法二:hosts映射+端口区分(无需额外IP)
- 步骤1:运行容器时指定不同端口
比如给项目A分配端口1234,项目B分配端口1235:# 项目A docker run -di -p 1234:80 yahya/example-server # 项目B docker run -di -p 1235:80 yahya/example-server-b - 步骤2:修改hosts文件添加多条映射
127.0.0.1 api.example.test 127.0.0.1 admin.example.test - 访问方式
分别通过api.example.test:1234和admin.example.test:1235访问对应容器。此方法无需额外配置IP,缺点是访问时需要携带端口号。
3. 关于Docker host模式的说明
Windows下Docker Desktop的--network host模式受WSL2隔离限制,兼容性不如Linux,虽然可以直接将容器端口绑定到宿主机端口,但多项目仍会面临端口冲突问题,因此不推荐作为多项目场景的解决方案。
内容的提问来源于stack exchange,提问作者Yahya Uddin
相关产品推荐
相关产品推荐

