You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mac OS下为Docker容器分配IP地址失败问题求助

问题描述
  • 在Windows 10的WSL环境中执行docker run -p 192.168.1.10:8080:80 nginx可正常运行,但在MacOS Ventura 13.4.1(Docker for Mac版本4.21.1)中执行时返回错误:

    docker: Error response from daemon: Ports are not available: exposing port TCP 192.168.1.10:8080 -> 0.0.0.0:0: listen tcp 192.168.1.10:8080: bind: can't assign requested address. ERRO[0000] error waiting for container:

  • 使用以下docker-compose.yml运行时也出现相同问题:
version: '3'

networks:
    test_net:
        name: test_net
        ipam:
            config:
                - subnet: 192.168.1.0/24
services:
    test_api:
        build:
            context: .
            dockerfile: .docker/site.dockerfile
        container_name: test_api
        ports:
            - 192.168.1.10:80:80
        volumes:
            - ./:/var/www/html
        networks:
            test_net:
                aliases:
                    - "api.test-local.com"
解决思路与方案

原因分析

Docker for Mac的网络架构和WSL存在差异:WSL直接复用Windows主机的网络栈,而Docker for Mac运行在后台虚拟机中,无法直接绑定主机未配置的IP地址。你指定的192.168.1.10要么不是Mac主机的有效网络地址,要么主机本身未绑定该IP,导致Docker无法完成端口映射的绑定操作。

具体解决方法

  1. 使用Mac主机真实IP
    先通过终端命令获取Mac当前的有效IP:

    • 无线网卡IP:ipconfig getifaddr en0
    • 有线网卡IP:ipconfig getifaddr en1
      将端口映射中的IP替换为获取到的真实IP,比如真实IP是192.168.1.5:
    • Docker命令改为:docker run -p 192.168.1.5:8080:80 nginx
    • docker-compose.yml的ports字段改为:- 192.168.1.5:80:80
  2. 绑定所有可用地址(无需指定IP)
    如果不需要限定特定IP,直接省略IP部分,让Docker绑定主机所有可用网络地址:

    • Docker命令改为:docker run -p 8080:80 nginx
    • docker-compose.yml的ports字段改为:- 80:80(或- 0.0.0.0:80:80)
      之后可通过localhost或Mac的任意IP访问服务。
  3. 配置静态IP到Mac主机
    如果必须使用192.168.1.10这个IP,先在Mac的「系统设置-网络」中,将该IP配置为主机的静态IP(确保局域网内无其他设备占用此IP),配置完成后再执行原Docker命令或启动docker-compose服务。

内容的提问来源于stack exchange,提问作者basagabi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 03:45:16