我对码头工人和码头工作者来说相当新,所以请原谅我这是一个愚蠢的问题......
我有一个包含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_db
或postgresql://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"
您可以在同一网络中添加两个容器,如下所示。然后你可以按照你想要的方式使用。只需将以下代码添加到您的撰写文件即可。然后它将创建一个网络并在那里添加这两个容器。这也将为您提供一个安全层,以便其他容器不能与您的数据库容器通信。
其次,删除container_name。你自己很困惑。默认情况下,服务的主机名等于服务名称。
networks:
default:
external:
name: "tools"