我在服务器上的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 exec命令访问:

$ docker exec -it postgres-container bash

# su postgres

$ psql

Or

$ docker exec -it postgres-container psql -U postgres

我已经在主机上运行postgres,不想允许网络连接,所以我在容器中运行临时postgres实例,并在两行中创建数据库:

# Run PostgreSQL
docker run --name postgres-container -e POSTGRES_PASSWORD=password -it -p 5433:5432 postgres

# Create database
docker exec -it postgres-container createdb -U postgres my-db

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

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

Docker-compose db bash

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

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

如果它是一个django后端应用程序,你可以这样做。

docker exec -it container_id python manage.py dbshell

首先打开postgres的docker映像

docker exec -it <container_name>

然后你会得到根目录--root@868594e88b53:/# 它需要数据库连接

psql postgresql://<username>:<databasepassword>@postgres:5432/<database>