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


当前回答

我已经在主机上运行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

其他回答

这个对我很有用:

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

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

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

Docker-compose db bash

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

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

我假设您希望每次从外部连接到容器时都能够查看容器中显示的数据。为此,必须在postgres映像上持久化数据。

如果你没有持久化数据,你将不得不重复你第一次所做的一切。 步骤3、5、6、7和8直接回答你的问题。

以下是我在Windows 10 powershell上执行的整个过程的详细概述(Linux和macOS中的命令也是一样的):

步骤1:以非管理员模式启动powershell

第二步:下载postgres docker镜像: Docker pull postgres:最新

步骤3:以分离模式启动docker容器,通过创建卷并将其绑定到目标,将数据持久化到postgres映像上 (注:默认5432是默认使用的端口;但是显式地声明它以防止来自诸如pgadmin、dbeaver等客户端的连接错误)。 docker run——name postgress -test -e POSTGRES_PASSWORD=password -p 5432:32 5432 -v postgress -data:/var/lib/postgresql/data -d postgres:最新的

步骤4:检查运行的容器状态 Docker ps a

步骤5:以交互模式进入container_name内部 (注意:像ls, pwd等命令可以在这里执行,如果你在安装过程中检查了linux容器) docker exec -it postgres-test psql

步骤6:创建示例数据。在这一点上,你可以用下面的方式来使用psql命令:

# CREATE DATABASE test;
# \c test
# CREATE TABLE test_table(something int);
# INSERT INTO test_table VALUES (123);
# SELECT * FROM test_table;
# \q

步骤7:打开一个数据库客户端应用程序,如pgadmin或dbeaver,在连接字段中输入以下内容:

Host: localhost
Database: test
User: postgres
Password: password

步骤8:在查询编辑器中输入select * from test_table查询,您应该能够看到输出123

连接到运行postgres的本地容器

安装 psql

酿造搜索postgres

编译安装postgresql

2.

docker run --name postgres -e POSTGRES_DB=users \
  -e POSTGRES_USER=john \
  -e POSTGRES_PASSWORD=password \
  -p 5432:5432 -d postgres
psql --host=localhost --username=john --dbname=users

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