如何在Docker-Compose中一起使用主机网络和任何其他用户定义的网络?

Sim*_*ürg 19 service networking ethernet docker docker-compose

我想连接两个Docker容器,它们在Docker-Compose文件中相互定义(appdb).其中一个(app)也应该连接到host网络.

容器应连接到公共用户定义的网络(appnetdefault),以使用来自docker网络的嵌入式DNS功能.

app 还需要直接连接到主机网络以接收泊坞主机的物理网络中的以太网广播(网络层2).

如果我同时使用这两个指令network_mode: hostnetworks在一起撰写,我会收到以下错误.

ERROR: 'network_mode' and 'networks' cannot be combined

所以我只能这样做networks!?

version: "3.3"

services:

  app:
    build: .
    image: app
    container_name: app
    environment:
      - MONGODB_HOST=db
    depends_on:
      - db
    networks:
      - appnet
      - hostnet

  db:
    image: mongo:latest
    container_name: db
    networks:
      - appnet

networks:
  appnet:
  hostnet:
    external:
      name: host
Run Code Online (Sandbox Code Playgroud)

上述撰写文件会产生错误. ERROR: for app network-scoped alias is supported only for containers in user defined networks

如果我host在服务中使用网络名称而不在网络中定义它(因为它已经存在),它说. ERROR: Service "app" uses an undefined network "host"

如何host在Docker-Compose中一起使用网络和任何其他用户定义的网络(或默认)?

我正在使用Docker version 17.11.0-ce-rc3, build 5b4af4fdocker-compose version 1.17.1, build 6d101fb

BMi*_*tch 7

TL; DR 你不能。主机网络关闭了该容器的 docker 网络命名空间。你不能同时打开和关闭它。

相反,使用已发布的端口或可以作为卷共享的 unix 套接字连接到您的数据库。例如,这里是如何发布端口:

version: "3.3"

services:

  app:
    build: .
    image: app
    container_name: app
    environment:
      - MONGODB_HOST=127.0.0.1

  db:
    image: mongo:latest
    container_name: db
    ports:
      - 127.0.0.1:27017:27017
Run Code Online (Sandbox Code Playgroud)


Miq*_*Miq 0

要使用主机网络,您不需要定义它。只需使用“ports”关键字来定义您想要在主机网络中公开的服务端口。