【问题标题】:Docker Container Connection Refused MacOSDocker 容器连接拒绝 MacOS
【发布时间】:2023-03-30 23:42:01
【问题描述】:

我有这个 docker-compose 文件:

networks:
    default:
        ipam:
            config:
                - subnet: 10.48.0.0/16
                  gateway: 10.48.0.1
services:
    haproxy:
        build: haproxy
        container_name: haproxy
        volumes:
            - ./haproxy/conf/:/usr/local/etc/haproxy/
            - ./haproxy/ssl/:/etc/ssl/xip.io/
        ports:
            - "80:80"
            - "443:443"
        networks: 
            default:
                ipv4_address: 10.48.0.2

    server:
        build: server
        container_name: server
        restart: always
        environment:
            - ENV=env=production db=true
        ports:
            - "8081:8081"
        volumes:
            - ./server/config:/usr/src/app/config
        depends_on: 
            - haproxy
        networks: 
            default:
                ipv4_address: 10.48.0.4

    frontend:
        build: frontend
        container_name: frontend
        restart: always
        ports:
            - "8080:8080"
        volumes:
            - ./frontend/config:/usr/src/app/config
        depends_on: 
            - server
        networks: 
            default:
                ipv4_address: 10.48.0.5
version: '2'

为了在 10.48.0.0/16 范围内定义的子网内部署后端服务器和前端接口。 所以我尝试为每个容器分配固定的 ip。在 Linux 上一切正常,所以我可以达到 10.48.0.4_8081/api,但在 MacOS 上,当我尝试做同样的事情时,我有 ERR_CONNECTION_REFUSED。 如果我尝试不使用 IP 进行连接,但使用 localhost:8081/api,这没关系。但是对于多个容器,我必须直接使用 IP 访问。 在每个容器内,如果我尝试 ping 另一个 IP 地址(例如从容器前端的 IP 10.48.0.5 我尝试 ping 10.48.0.4),一切正常。 所以我的问题是,我该如何做才能对另一个服务上的 api 进行 http 调用?感谢您的帮助。

【问题讨论】:

  • 您在防火墙中打开了端口吗?关闭你的防火墙,看看它是否有效
  • @RutgerVk 嗨,mac 上的防火墙尚未激活
  • 您是否只是想在您的服务之间进行调用,以及从外部调用您的服务?您不需要任何手动 IP 配置来执行此操作。
  • 嗨@DavidMaze,在这种情况下子网是必要的,以便为容器分配一个固定的IP,否则它可能会改变,因此应用程序的配置也是如此
  • 您知道容器可以使用容器名称(或 Docker Compose 名称)作为 DNS 名称来相互寻址吗?

标签: macos docker docker-compose containers subnet


【解决方案1】:

我在任何地方都阅读过在 windows 和 mac 下众所周知的情况,但在 linux 上却没有,在哪里可以从客户端直接在容器的 IP 地址上发出请求。这在 mac 上是不可能的,并且在 github 上仍然存在问题。 在这种情况下,我使用了 haproxy 来代理对每个容器的请求。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-07
    • 1970-01-01
    • 2019-06-07
    • 2020-08-10
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多