![](/img/trans.png)
[英]Tomcat Docker Container With Network_Mode Host Can't Be Reached
[英]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_db
或postgresql://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.