簡體   English   中英

使用network_mode:“主機”公開由docker組成的容器,並使容器與容器聯網

[英]Expose a docker composed container with network_mode: “host” and keep container to container networking

我對docker和docker compose相當陌生,所以如果這是一個愚蠢的問題,請原諒我...

我有2個容器的撰寫文件。 具有端口8123的homeassistant容器和具有5432的數據庫。homeassistant可以使用URL postgresql://user:password@db:5432/homeassistant_db訪問數據庫。 我認為這是因為docker在主機上創建了db綁定,這就是為什么我可以連接到db的原因。

但是我需要將homeassistant綁定到主機,這可以通過network_mode: "host" ,您可以在配置中看到注釋。 當我這樣做時,我確實可以綁定到主機,而家庭助手可以做到這一點,即發現網絡設備等。

不幸的是,這斷開了與數據庫的連接,因此我不能再使用postgresql://user:password@db:5432/homeassistant_db url。

如何將homeassistant附加到主機並保持數據庫連接正常工作? 我想我可以將數據庫主機從db更改為pi的url或網絡名稱(例如postgresql://user:password@192.168.0.100:5432/homeassistant_dbpostgresql://user:password@homeassistant.local:5432/homeassistant_db ),但感覺並不像它postgresql://user:password@homeassistant.local: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"

您可以將兩個容器添加到同一網絡中,如下所示。 然后,您可以使用想要的方式。 只需將以下代碼添加到您的撰寫文件即可。 然后它將創建一個網絡,並在其中添加這兩個容器。 這也將為您提供一個安全層,以便其他任何容器都無法與您的db容器通信。

第二,刪除container_name。 你在混亂自己。 服務的主機名默認等於服務名。

networks:
  default:
    external:
      name: "tools"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM