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

问题描述 投票:0回答:3

我想将 Docker-Compose 文件中定义的两个 Docker 容器相互连接(

app
db
)。其中之一 (
app
) 也应该连接到
host
网络。

容器应连接到通用的用户定义网络(

appnet
default
)以使用 docker 网络中的嵌入式 DNS 功能。

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

在 compose 中同时使用指令

network_mode: host
networks
会导致以下错误:

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

在服务中指定网络名称

host
而不在网络中定义它(因为它已经存在),会导致:

ERROR: Service "app" uses an undefined network "host"

下一步尝试:显式定义两个网络,并且不要在服务级别使用

network_mode: host
属性。

version: '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: null
  hostnet:
    external:
      name: host

上述撰写文件产生错误:

ERROR: for app  network-scoped alias is supported only for containers in user defined networks

如何在 Docker-Compose 中一起使用

host
网络和任何其他用户定义的网络(或默认网络)?

docker networking service docker-compose ethernet
3个回答
19
投票

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

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

version: "3.3"

services:

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

  db:
    image: mongo:latest
    container_name: db
    ports:
      - "127.0.0.1:27017:27017"

1
投票

自 Docker 18.03+ 起,人们可以使用

host.docker.internal
从容器内访问主机。无需添加
host
网络或将其与用户定义的网络混合。

来源:Docker 技巧 #65:从容器中获取 Docker 主机的 IP 地址


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.