gpt4 book ai didi

postgresql - 使用Docker-compose,如何通过容器和主机中的相同端口访问容器数据库

转载 作者:行者123 更新时间:2023-12-02 21:11:45 27 4
gpt4 key购买 nike

我正在为PostgreSQL运行一个docker-compose容器。容器中的postgresql数据库在标准端口5432上运行,并且我正在将该端口发布到主机上的端口5444(因为正在使用主机的postgresql默认端口)。

我在主机和容器中使用相同的配置(一个.env文件,该文件为cli命令和整个应用程序提供配置设置)。不幸的是,无论我选择哪个端口,一个系统都将无法访问。例如,我不能运行:

[k@host]$ pgsql -p 5444 # Connects

在主机中,并且仍在容器内进行工作:
[k@db-container]$ pgsql -p 5444 # Errors in container

容器的postgresql-server在5432上运行:
[k@db-container]$ pgsql -p 5432 # Connects successfully in container

端口通过docker-compose.yml通过以下方式发布:
-端口:
-“5444:5432”

所以目前我不知道如何简单地通过docker-compose.yml在每个地方配置相同的端口! expose命令公开端口,但不允许重新映射, ports转发主机<->容器,但不重新映射内部端口。我曾考虑过在postgresql容器配置中重新映射postgresql默认端口,但是完全重新配置postgresql似乎很重要,这可以通过docker-compose在每个 docker-compose up上完成。

如何重新映射容器内的端口,以便可以在主机和容器中的任何地方使用端口5444?

最佳答案

标准的PostgreSQL客户端库支持several environment variables,它告诉服务器服务器在哪里。与可以使用$PGHOST配置主机的方式相同,可以使用$PGPORT配置端口。

在Docker Compose上下文中,设置这些设置应该很简单:

version: '3'
services:
postgres:
image: postgres:11
ports: ['5444:5432']
volumes: ['./postgres:/var/lib/postgresql/data']
myapp:
build: .
ports: ['8888:8888']
env:
PGHOST: postgres
# default PGPORT=5432 will work fine

同样,如果要在主机上的开发环境中运行应用程序,则可以设置
PGHOST=localhost PGPORT=5444 ./myapp

关于postgresql - 使用Docker-compose,如何通过容器和主机中的相同端口访问容器数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54117629/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com