【发布时间】: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