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

35g0bw71  于 2022-11-22  发布在  Docker
关注(0)|答案(3)|浏览(432)

我想连接两个Docker容器,在Docker-Compose文件中定义到彼此(appdb)。其中一个(app)也应该连接到host网络。
集装箱应连接到一个通用的用户定义网络(appnetdefault),以使用来自Docker网络的 * 嵌入式DNS* 功能。
X1 M6 N1 X也需要直接连接到主机网络以接收对接主机的物理网络中的以太网广播(网络层2)。
在compose中同时使用指令network_mode: hostnetworks会导致以下错误:
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网络和任何其他用户定义的网络(或默认网络)?

epggiuax

epggiuax1#

你不能。主机网络关闭了那个容器的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"
42fyovps

42fyovps2#

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

wvmv3b1j

wvmv3b1j3#

由于Docker 18.03+可以使用host.docker.internal从您的容器中访问您的主机。无需添加host网络或将其与用户定义的网络混合。
来源:Docker Tip #65: Get Your Docker Host's IP Address from in a Container

相关问题