使用network_mode公开docker compose容器:“host”并将容器保存到容器网络

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

我对码头工人和码头工作者来说相当新,所以请原谅我这是一个愚蠢的问题......

我有一个包含2个容器的撰写文件。一个homepathistant容器,端口8123暴露,数据库5432. homeassistant可以使用url postgresql://user:password@db:5432/homeassistant_db访问数据库。我认为这是因为docker在主机上创建了db绑定,这就是我可以连接到db的原因。

但是我需要将homeassistant绑定到主机,我可以使用network_mode: "host",你可以在我的配置中看到它。当我这样做时,我确实可以绑定到主机,homeassistant可以发现网络设备等...

不幸的是,这打破了与数据库的连接,因此我不能再使用postgresql://user:password@db:5432/homeassistant_db网址了。

如何将homeassistant连接到主机并保持数据库连接正常?我想我可以将数据库主机从db更改为pi的网址或网络名称(例如postgresql://user:[email protected]:5432/homeassistant_dbpostgresql://user:[email protected]:5432/homeassistant_db),但这并不像它可能那样干净或健壮。

我真的不明白网络绑定我想尝试和学习所以我可以自己解决这个问题。

撰写以下文件:

version: '3'

services:

  db:
    restart: always
    container_name: "homeassistant_db_container"
    # image: postgres:latest
    image: tobi312/rpi-postgresql
    ports:
      - "5432:5432"
    volumes:
      - ./data/postgres/data:/var/lib/postgresql/data/pgdata
    env_file:
      - ./envs/database.env

  home_assistant:
    container_name: "homeassistant_container"
    restart: always
    image: homeassistant/raspberrypi3-homeassistant
    ports:
      - "8123:8123"
    # network_mode: "host"
    env_file:
      - ./envs/homeassistant.env
    volumes:
      - ./configs/homeassistant:/config
    depends_on:
      - db


volumes:
  data:
    driver_opts:
      type: none
      o: bind
      device: "${PWD}/data/postgres"
docker docker-compose docker-networking
1个回答
1
投票

您可以在同一网络中添加两个容器,如下所示。然后你可以按照你想要的方式使用。只需将以下代码添加到您的撰写文件即可。然后它将创建一个网络并在那里添加这两个容器。这也将为您提供一个安全层,以便其他容器不能与您的数据库容器通信。

其次,删除container_name。你自己很困惑。默认情况下,服务的主机名等于服务名称。

networks:
  default:
    external:
      name: "tools"
© www.soinside.com 2019 - 2024. All rights reserved.