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

时间:2017-11-15 09:00:20

标签: docker networking service docker-compose ethernet

我想将Docker-Compose文件中定义的两个Docker容器相互连接(appdb)。其中一个(app)也应该连接到host网络。

容器应连接到通用的用户定义网络(appnetdefault),以使用docker网络中的嵌入式DNS 功能。

app还需要直接连接到主机网络,以接收docker主机物理网络中的以太网广播(网络层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

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

答案 2 :(得分:-1)

自Docker 18.03+起,您可以使用host.docker.internal从您的容器中访问您的主机。无需添加host网络或将其与用户定义的网络混合。

来源:Docker Tip #65: Get Your Docker Host's IP Address from in a Container