我对docker和docker compose还是很陌生,所以如果这是一个愚蠢的问题,请原谅我...
我有一个包含2个容器的撰写文件。具有端口8123的本地助手容器和具有5432的数据库。本地助手可以使用URL postgresql://user:password@db:5432/homeassistant_db
访问数据库。我认为这是因为docker在主机上创建了db
绑定,这就是为什么我可以连接到db
的原因。
但是我需要将homeassistant绑定到主机,我可以使用network_mode: "host"
来完成,您可以在配置中看到注释。当我这样做时,我确实可以绑定到主机,而homeassantant可以做到这一点,即发现网络设备等...
不幸的是,这断开了与数据库的连接,因此我不能再使用postgresql://user:password@db:5432/homeassistant_db
url。
如何将homeassant附加到主机并保持数据库连接正常工作?我想我可以将数据库主机从db
更改为pi的url或网络名称(例如postgresql://user:password@192.168.0.100: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"
答案 0 :(得分:1)
您可以将两个容器添加到同一网络中,如下所示。然后,您可以使用想要的方式。只需将以下代码添加到您的撰写文件即可。然后它将创建一个网络,并在其中添加这两个容器。这也将为您提供安全层,以便其他任何容器都无法与您的db容器通信。
第二,删除container_name。你在混乱自己。服务的默认主机名等于服务名。
networks:
default:
external:
name: "tools"