docker-compose服务侦听指定的接口

use*_*414 6 docker-compose

我使用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"
Run Code Online (Sandbox Code Playgroud)

但它不是很方便,因为我必须在改变的情况下重写所有的ips.

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

use*_*414 7

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

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

服务定义:

  nginx1:
    build: ./nginx
    ports:
      - "80:80"
    networks:
      - intranet    
  nginx2:
    build: ./nginx
    ports:
      - "80:80"
    networks:
      - internet
Run Code Online (Sandbox Code Playgroud)

网络定义:

networks:
    internet:
      external: true
    intranet:
      external: true
Run Code Online (Sandbox Code Playgroud)

然后,在 docker-compose up 之前,您必须创建外部网络

本例中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
Run Code Online (Sandbox Code Playgroud)