Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 只能将pgadmin连接到端口5432上的postgres docker容器,但不能连接任何其他端口?_Postgresql_Macos_Docker_Docker Compose_Pgadmin 4 - Fatal编程技术网

Postgresql 只能将pgadmin连接到端口5432上的postgres docker容器,但不能连接任何其他端口?

Postgresql 只能将pgadmin连接到端口5432上的postgres docker容器,但不能连接任何其他端口?,postgresql,macos,docker,docker-compose,pgadmin-4,Postgresql,Macos,Docker,Docker Compose,Pgadmin 4,我正在尝试将PGAdmin连接到docker容器,并发现这篇文章()非常有帮助。但我尝试过使用5432以外的端口进行测试,但没有任何运气 例如,我尝试在docker compose文件中使用5434,并尝试在pgadmin中使用该端口,但出现以下错误(这是使用docker inspect找到的IP地址) 这就是我的docker compose文件的样子(我故意使用不同的端口来“暴露”和“端口”,试图缩小允许我通过PGAdmin连接的端口范围,但我运气不好 database: image

我正在尝试将PGAdmin连接到docker容器,并发现这篇文章()非常有帮助。但我尝试过使用5432以外的端口进行测试,但没有任何运气

例如,我尝试在docker compose文件中使用5434,并尝试在pgadmin中使用该端口,但出现以下错误(这是使用docker inspect找到的IP地址)

这就是我的docker compose文件的样子(我故意使用不同的端口来“暴露”和“端口”,试图缩小允许我通过PGAdmin连接的端口范围,但我运气不好

database:
    image: postgres:10.4-alpine
    container_name: kafka-nodejs-example-database
    environment:
      POSTGRES_USER: "abcdef"
      POSTGRES_PASSWORD: "abcdef"
    expose:
      - "5435"
    ports:
      - 8000:5434
pgadmin:
    image: dpage/pgadmin4
    ports:
      - 5454:5454/tcp
    environment:
      - PGADMIN_DEFAULT_EMAIL=admin@mydomain.com
      - PGADMIN_DEFAULT_PASSWORD=postgres
      - PGADMIN_LISTEN_PORT=5454
为什么pgadmin对5432没有问题,但当我要求它使用另一个端口时,它会抛出这个错误

我应该注意,上面屏幕截图中的错误是因为尝试将postgres容器连接到pgadmin容器。我还尝试在我的本地pgadmin应用程序中连接到postgres容器,下面出现了不同的超时错误。我甚至在尝试使用pgadmin的本地副本连接时,端口5432也出现了相同的错误


您公开了容器的端口5434,但PostgreSQL本身仍然配置为侦听端口5432。这就是您无法访问数据库的原因

在运行
initdb
之后和启动PostgreSQL之前,配置集群,例如使用

echo'port=5434'>>datadir/postgresql.auto.conf

但是,不需要在其他端口上启动PostgreSQL。只需将端口5432映射到5434即可。

您公开了容器的端口5434,但PostgreSQL本身仍然配置为在端口5432上侦听。这就是您无法访问数据库的原因

在运行
initdb
之后和启动PostgreSQL之前,配置集群,例如使用

echo'port=5434'>>datadir/postgresql.auto.conf

但不需要在其他端口上启动PostgreSQL。只需将端口5432映射到5434即可。

PostgreSQL服务器在端口5432上侦听。仅更改Docker级别配置不会更改服务器进程本身侦听的位置。这意味着:

  • 端口中的第二个数字:
    必须是5432。(第一个数字可以是您想要的任何数字。)
  • 来自其他Docker容器的连接必须连接到端口5432。(
    端口:
    被忽略,不需要。)
  • 如果您
    expose:
    一个端口,它也必须是5432。(这没有实际效果,在Dockerfile中重复了
    expose 5432

由于每个容器都在一个独立的网络名称空间中运行,因此没有特别的理由要更改此名称空间。您可以运行多个数据库容器,每个容器都有自己的独立容器端口5432;它们不会冲突。

PostgreSQL server侦听端口5432。只需更改Docker级别配置中的内容不会发生冲突更改服务器进程本身侦听的位置。这意味着:

  • 端口中的第二个数字:
    必须是5432。(第一个数字可以是您想要的任何数字。)
  • 来自其他Docker容器的连接必须连接到端口5432。(
    端口:
    被忽略,不需要。)
  • 如果您
    expose:
    一个端口,它也必须是5432。(这没有实际效果,在Dockerfile中重复了
    expose 5432

由于每个容器都在一个独立的网络名称空间中运行,因此没有特别的理由要更改此名称空间。您可以运行多个数据库容器,每个容器都有自己的独立容器端口5432;它们不会发生冲突。

感谢您的答复-因此,在这种情况下,我有一个澄清问题。如果我想为我的dua执行此操作l容器方法(postgres和pgadmin都使用容器),我需要创建一个卷并配置该容器的auto.conf文件?如果我想使用我的本地pgadmin应用程序连接到postgres容器,我会更新该pgadmin实例的auto.conf文件?抱歉,如果我不清楚:这是关于数据库的,不是pgadmin。不是你的错,我对这一切都很陌生,但仍然有问题理解。因为我正在为容器使用postgres映像,所以我自己在任何时候都没有运行“initdb”。这是否意味着容器方法不可能使用5432以外的端口?如果您无法控制服务器的初始化和启动时间,并且无法添加任何操作,那么您可能无法使用5432.谢谢你的回复-在这种情况下,我有一个澄清的问题。如果我想为我的双容器方法(postgres和pgadmin都使用容器)这样做的话,我需要创建一个卷并配置该容器的auto.conf文件?如果我想使用我的本地pgadmin应用程序连接到postgres容器,我会更新该pgadmin实例的auto.conf文件?抱歉,如果我不清楚:这是关于数据库的,不是pgadmin。不是你的错,我对这一切都很陌生,但仍然有问题理解。因为我正在为容器使用postgres映像,所以我自己在任何时候都没有运行“initdb”。这是否意味着容器方法不可能使用5432以外的端口?如果您无法控制服务器的初始化和启动时间,并且无法添加任何操作,那么您可能无法使用5432.当我在pgadmin中创建服务器连接时,如上面的屏幕截图所示,我不是在告诉服务器在端口5434而不是5432上侦听吗?如果这是一个愚蠢的问题,那么很抱歉。听起来我应该一直使用5432,当使用任何类型的postgres容器/连接时,而不是试图摆弄它?你不是配置容器内的任何内容。(这就是为什么需要更改PostgreSQL配置文件。)您需要单独设置容器内进程的端口号,以及