Docker容器连接被MacOS拒绝

时间:2018-10-27 09:18:25

标签: macos docker docker-compose containers subnet

我有这个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调用?谢谢您的帮助。

1 个答案:

答案 0 :(得分:2)

我到处都读到了Windows和Mac上的一个众所周知的情况,但在Linux上却不是,在这种情况下,客户端可以直接在容器的IP地址上发出请求。在Mac上这是不可能的,但在github上仍然存在问题。 在这种情况下,我使用haproxy来将请求代理到每个容器。