使用 network_mode: "host" 公开一个 docker 组合容器,并保持容器到容器网络
Expose a docker composed container with network_mode: "host" and keep container to container networking
我对 docker 和 docker 撰写相当陌生,如果这是一个愚蠢的问题,请原谅我...
我有一个包含 2 个容器的 compose 文件。暴露端口 8123 的 homeassistant 容器和 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
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"
您可以将两个容器添加到同一网络中,如下所示。然后你可以使用你想要的方式。只需将以下代码添加到您的撰写文件中。然后它将创建一个网络并在其中添加这两个容器。这也将为您提供一个安全层,这样其他容器就无法与您的数据库容器通信。
其次,移除container_name。你在混淆自己。默认情况下,服务的主机名等于服务名。
networks:
default:
external:
name: "tools"
我对 docker 和 docker 撰写相当陌生,如果这是一个愚蠢的问题,请原谅我...
我有一个包含 2 个容器的 compose 文件。暴露端口 8123 的 homeassistant 容器和 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
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"
您可以将两个容器添加到同一网络中,如下所示。然后你可以使用你想要的方式。只需将以下代码添加到您的撰写文件中。然后它将创建一个网络并在其中添加这两个容器。这也将为您提供一个安全层,这样其他容器就无法与您的数据库容器通信。
其次,移除container_name。你在混淆自己。默认情况下,服务的主机名等于服务名。
networks:
default:
external:
name: "tools"