我在服务器上的docker容器中有Postgresql。我如何从外部,也就是从我的本地计算机连接到它?我应该应用什么设置来允许这样做?


当前回答

我在Docker容器中使用django和postgres。在docker-compose文件中,添加以下内容:

db:
    image: postgres:10-alpine
    environment:
        - POSTGRES_DB=app
        - POSTGRES_USER=postgres
        - POSTGRES_PASSWORD=supersecretpassword
    ports:
        - "6543:5432"

这个端口设置使用了本地机器可以访问的端口6543(它只需要不同于5432)。就我自己而言,我将DBeaver连接到它。这将防止您的应用程序请求和本地机器请求之间的端口冲突。

起初,我收到一条消息,说端口5432正在使用(由django应用程序),所以我无法通过pgAdmin或DBeaver访问。

其他回答

Docker ps -a来获取容器id docker exec -它的psql -U -W

我设法让它在linux上运行

运行docker postgres -确保端口被发布,我使用alpine是因为它是轻量级的。 docker run——rm -P 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234"——name pg postgres:alpine 使用另一个终端,使用postgres uri从主机访问数据库 psql postgresql: / / postgres: 1234 @localhost: 5432 / postgres

MAC用户请将PSQL替换为pgcli

我知道这有点晚了,如果你像@Martin一样使用docker-compose的话

这些是帮助我连接到容器内psql的代码片段

Docker-compose db bash

root@de9f9358b70:/# psql -h db -U根-d posts_db

我不能评论,因为我没有50的声誉。希望这能有所帮助。

要从本地主机连接,你需要添加'——net host':

docker run --name some-postgres --net host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres

你可以直接访问服务器而不使用exec从你的localhost,通过使用:

psql -h localhost -p 5432 -U postgres

这个对我很有用:

PGPASSWORD=postgres psql -h localhost -p 3307 -U postgres -d postgres

使用上面的方法加载一个初始脚本:

PGPASSWORD=postgres psql -h localhost -p 3307 -U postgres -d postgres < src/sql/local/blabla.sql

不要说我重新映射我的端口为:

docker run -p3307:5432 --name postgres -e POSTGRES_PASSWORD=postgres -d postgres