我在服务器上的docker容器中有Postgresql。我如何从外部,也就是从我的本地计算机连接到它?我应该应用什么设置来允许这样做?
当前回答
我假设您希望每次从外部连接到容器时都能够查看容器中显示的数据。为此,必须在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
其他回答
你也可以通过docker exec命令访问:
$ docker exec -it postgres-container bash
# su postgres
$ psql
Or
$ docker exec -it postgres-container psql -U postgres
在构建我的网关微服务应用程序后,我也遇到了同样的问题。无法从Heidisql连接到竞争化postgresql。
在这一刻,我已经解决了它简单地指定postgresql密码docker-compose。Yml和端口。
所以你应该找到并打开docker-compose.yml。然后您应该输入POSTGRES_PASSWORD(不要让它为空),并指定端口“5432:5432”
服务: microservice33-postgresql: 环境: - POSTGRES_USER = microservice33 - POSTGRES_PASSWORD =之后 - POSTGRES_HOST_AUTH_METHOD =信任 港口: ——5432:5432
参考链接和截图张贴
Docker ps -a来获取容器id docker exec -它的psql -U -W
你可以这样运行Postgres(映射一个端口):
docker run --name some-postgres -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
现在您已经将容器的端口5432映射到服务器的端口5432。-p <host_port>:<container_port>。所以现在你的postgres可以从public-server-ip:5432访问
测试: 运行postgres数据库(上面的命令)
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
05b3a3471f6f postgres "/docker-entrypoint.s" 1 seconds ago Up 1 seconds 0.0.0.0:5432->5432/tcp some-postgres
进入你的容器并创建一个数据库:
docker exec -it 05b3a3471f6f bash
root@05b3a3471f6f:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q
转到您的本地主机(其中有一些工具或psql客户端)。
psql -h public-ip-server -p 5432 -U postgres
(mysecretpassword密码)
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+------------+------------+-----------------------
mytest | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
postgres | postgres | UTF8 | en_US.utf8 | en_US.utf8 |
template0 | postgres | UTF8 | en_US.utf8 | en_US.utf8 | =c/postgres
因此,您正在从本地主机访问数据库(在服务器上的docker中运行)。
在这篇文章中详细解释了这一点。
连接到运行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
推荐文章
- 查询JSON类型内的数组元素
- 获得PostgreSQL数据库中当前连接数的正确查询
- 纬度和经度的数据类型是什么?
- 如何在PostgreSQL中临时禁用触发器?
- 输入文件似乎是一个文本格式转储。请使用psql
- 试图连接到https://index.docker.io时,网络超时
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何添加列,如果不存在PostgreSQL?
- 如何在Postgres中获得两个字段的MIN() ?
- 为每个Docker图像查找图层和图层大小
- 如何避免在为Python项目构建Docker映像时重新安装包?
- 截断Postgres数据库中的所有表
- 如何用docker-compose更新现有图像?