使用 Docker-compose,如何通过容器和主机中的相同端口访问容器数据库
Using Docker-compose, how to access the container database via the same port in container and in host
我正在 运行 为 postgresql 创建一个 docker-compose 容器。容器中的 postgresql 数据库在标准端口 5432 上 运行ning,我将该端口发布到主机上的端口 5444(因为主机的 postgresql 默认端口正在使用中)。
我在主机和容器中使用相同的配置(一个 .env 文件,为 cli 命令和整个应用程序提供配置设置)。不幸的是,无论我选择哪个端口,一个系统都会失去访问权限。例如,我不能 运行:
[k@host]$ pgsql -p 5444 # Connects
在宿主机中并且仍然在容器中工作:
[k@db-container]$ pgsql -p 5444 # Errors in container
容器的 postgresql-server 运行ning on 5432:
[k@db-container]$ pgsql -p 5432 # Connects successfully in container
并且端口是通过 docker-compose.yml 发布的:
- 端口:
- “5444:5432”
所以目前我不知道如何通过 docker-compose.yml 在任何地方配置同一个端口! expose
命令公开端口但不允许重新映射,ports
转发主机<-->容器,但不允许重新映射内部端口。我考虑过在 postgresql 容器配置中重新映射 postgresql 默认端口,但是通过 docker-compose 在每个 docker-compose up
上完全重新配置 postgresql 似乎并不容易。
如何重新映射容器内的端口,以便我可以在主机和容器中的任何地方使用端口 5444?
您不能在 主机 上使用同一个端口。
如果实例具有不同个IP地址,没有什么能阻止您运行多个实例。
psql -p 5444
默认为 psql --host=127.0.0.1 -p 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 容器。容器中的 postgresql 数据库在标准端口 5432 上 运行ning,我将该端口发布到主机上的端口 5444(因为主机的 postgresql 默认端口正在使用中)。
我在主机和容器中使用相同的配置(一个 .env 文件,为 cli 命令和整个应用程序提供配置设置)。不幸的是,无论我选择哪个端口,一个系统都会失去访问权限。例如,我不能 运行:
[k@host]$ pgsql -p 5444 # Connects
在宿主机中并且仍然在容器中工作:
[k@db-container]$ pgsql -p 5444 # Errors in container
容器的 postgresql-server 运行ning on 5432:
[k@db-container]$ pgsql -p 5432 # Connects successfully in container
并且端口是通过 docker-compose.yml 发布的: - 端口: - “5444:5432”
所以目前我不知道如何通过 docker-compose.yml 在任何地方配置同一个端口! expose
命令公开端口但不允许重新映射,ports
转发主机<-->容器,但不允许重新映射内部端口。我考虑过在 postgresql 容器配置中重新映射 postgresql 默认端口,但是通过 docker-compose 在每个 docker-compose up
上完全重新配置 postgresql 似乎并不容易。
如何重新映射容器内的端口,以便我可以在主机和容器中的任何地方使用端口 5444?
您不能在 主机 上使用同一个端口。
如果实例具有不同个IP地址,没有什么能阻止您运行多个实例。
psql -p 5444
默认为 psql --host=127.0.0.1 -p 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