docker-compose service listen on specified interface

docker-compose service listen on specified interface

我使用 docker-machine 和 docker-compose。

我用的docker机器有多个接口。

有没有办法强制服务仅在机器的特定接口上侦听而无需在端口部分定义此接口的 ip 地址?

现在我在docker-compose.yml

中使用它
    ports:
      - "10.5.1.28:80:80"
      - "10.5.1.28:2222:22"
      - "10.5.1.28:443:443"

但不是很方便,因为我必须重写所有ip以防更改。

有没有更简单的方法来做到这一点?

一个优雅的解决方案是创建外部网络。

例如,两个 nginx 使用外部网络(互联网和内部网):

服务定义:

  nginx1:
    build: ./nginx
    ports:
      - "80:80"
    networks:
      - intranet    
  nginx2:
    build: ./nginx
    ports:
      - "80:80"
    networks:
      - internet

网络定义:

networks:
    internet:
      external: true
    intranet:
      external: true

然后先docker-组成你必须创建外部网络

本例中192.168.178.69为公网IP,10.5.1.22为内网IP

docker network create -d bridge -o \
      com.docker.network.bridge.host_binding_ipv4=192.168.178.69 internet

docker network create -d bridge -o \
      com.docker.network.bridge.host_binding_ipv4=10.5.1.22 intranet