我在服务器上的docker容器中有Postgresql。我如何从外部,也就是从我的本地计算机连接到它?我应该应用什么设置来允许这样做?
当前回答
你也可以通过docker exec命令访问:
$ docker exec -it postgres-container bash
# su postgres
$ psql
Or
$ docker exec -it postgres-container psql -U postgres
其他回答
我假设您希望每次从外部连接到容器时都能够查看容器中显示的数据。为此,必须在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
由于某种原因,5432端口似乎受到保护。我把我的端口配置从5432:5432更改为5416:5432,下面的命令可以从docker容器外部连接到postgres数据库:
psql -h localhost -p 5416 -U <my-user> -d <my-database>
我尝试从localhost (mac)连接到postgres容器。我将docker-compose文件中的端口从5432更改为3306,并启动了容器。不知道我为什么这么做:|
然后我尝试通过PSequel和adminer连接到postgres,但连接无法建立。
切换回端口5432后,一切工作正常。
db:
image: postgres
ports:
- 5432:5432
restart: always
volumes:
- "db_sql:/var/lib/mysql"
environment:
POSTGRES_USER: root
POSTGRES_PASSWORD: password
POSTGRES_DB: postgres_db
这就是我想要分享的经验。也许有人可以利用它。
连接到运行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
如果它是一个django后端应用程序,你可以这样做。
docker exec -it container_id python manage.py dbshell
推荐文章
- Docker -绑定0.0.0.0:4000失败:端口已经分配
- 将Python诗歌与Docker集成
- 如何在系统启动时运行docker-compose up -d ?
- 使用PSQL命令查找主机名和端口
- 如何确定一个进程是否运行在lxc/Docker内部?
- 在docker容器上挂载多个卷?
- Kubernetes如何使部署更新映像
- Postgresql列表和排序表的大小
- Docker-compose up vs Docker-compose up -build vs Docker-compose build -no-cache
- 在Docker Alpine容器中启动一个shell
- 允许docker容器连接到本地/主机postgres数据库
- 选择其他表中没有的行
- 在PostgreSQL中使用UTC当前时间作为默认值
- 在Docker Desktop中定位数据卷(Windows)
- 如何通过docker运行传递参数到Shell脚本