我对docker和docker组合相当陌生,所以如果这是一个愚蠢的问题,请原谅我……
我有一个包含2个容器的撰写文件。一个暴露了端口8123的homeassistant容器和一个带有5432的数据库。家庭助理可以使用url postgresql://user:password@db:5432/homeassistant_db来访问数据库。我认为这是因为docker已经在主机上创建了一个db绑定,这就是我可以连接到db的原因。
然而,我需要将homeassistant绑定到主机上,我可以使用network_mode: "host"来做这件事,你可以在我的配置中看到注释掉了。当我这样做时,我确实可以绑定到主机上,并且homeassistant可以发现网络设备等。
不幸的是,这会中断与数据库的连接,因此我不能再使用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),但这感觉并不像它应该的那样干净或健壮。
我真的不太了解网络绑定,所以我想尝试学习,这样我就可以在以后自己解决这个问题。
编写以下文件:
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"发布于 2019-03-08 04:52:50
您可以将两个容器添加到同一个网络中,如下所示。然后你就可以随心所欲地使用了。只需将以下代码添加到您的编写文件中。然后,它将创建一个网络,并在其中添加这两个容器。这也会给你一个安全层,这样其他容器就不能和你的db容器对话了。
第二,删除container_name。你把自己搞糊涂了。默认情况下,服务的主机名与服务名相同。
networks:
default:
external:
name: "tools"https://stackoverflow.com/questions/55039443
复制相似问题