我试图将PGAdmin连接到一个docker容器上,并找到了这个帖子(https:/stackoverflow.coma5772941211923025。)非常有帮助,但我试着用5432以外的端口进行测试,却没有任何收获。但是我试着用5432以外的端口进行测试,却没有任何收获。
例如,我尝试在我的docker-compose文件中使用5434,并尝试在pgadmin中使用该端口,但得到了下面的错误信息(这是使用docker inspect发现的IP地址)。
这是我的docker-compose文件的样子(我故意在 "expose "和 "ports "上使用不同的端口,试图缩小哪一个端口可以让我通过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:
- [email protected]
- 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即可。
PostgreSQL服务器监听的端口是5432。 只是在Docker级别的配置中改变一些东西,并不会改变服务器进程本身的监听位置。 也就是说。
ports:
必须是5432。 第一个数字可以是你想要的任何数字)。ports:
被忽略,也不是必需的)。)expose:
的端口, 它也必须是 5432。 (这样做没有实际效果, 而且重复了 EXPOSE 5432
在Docker文件中)。)由于每个容器都运行在一个孤立的网络命名空间中,所以没有特别的理由要改变这个。 您可以运行多个数据库容器,而且每个容器都有自己独立的容器端口 5432;它们不会冲突。