从外部连接到docker容器中的Postgresql
我在docker容器中的服务器上安装了Postgresql。我如何从外部,即从本地计算机连接到它?我应该应用什么设置来允许这样做?您可以通过这种方式运行Postgres(映射端口):从外部连接到docker容器中的Postgresql,postgresql,docker,remote-connection,Postgresql,Docker,Remote Connection,我在docker容器中的服务器上安装了Postgresql。我如何从外部,即从本地计算机连接到它?我应该应用什么设置来允许这样做?您可以通过这种方式运行Postgres(映射端口): docker run——命名一些postgres-e postgres\u PASSWORD=mysecretpassword-d-p 5432:5432 postgres 现在,您已经将容器的端口5432映射到服务器的端口5432-p:。现在可以从公共服务器ip:5432 要测试: 运行postgres数据库(
docker run——命名一些postgres-e postgres\u PASSWORD=mysecretpassword-d-p 5432:5432 postgres
现在,您已经将容器的端口5432映射到服务器的端口5432-p:
。现在可以从公共服务器ip:5432
要测试:
运行postgres数据库(上面的命令)
进入容器内部并创建数据库:
docker exec -it 05b3a3471f6f bash
root@05b3a3471f6f:/# psql -U postgres
postgres-# CREATE DATABASE mytest;
postgres-# \q
转到您的本地主机(在那里您有一些工具或psql客户端)
(密码mysecretpassword)
因此,您正在从本地主机访问数据库(在服务器上的docker中运行)
在中,它被详细地解释了。我已经在主机上运行了postgres,不想允许从网络进行连接,所以我在容器中运行了临时postgres实例,并在两行中创建了数据库:
#运行PostgreSQL
docker run--name postgres container-e postgres_PASSWORD=PASSWORD-it-p 5433:5432 postgres
#创建数据库
docker exec-it postgres container createdb-U postgres my db
您也可以通过docker exec命令通过以下方式进行访问:
$ docker exec -it postgres-container bash
# su postgres
$ psql
或
在这种情况下,它是django后端应用程序,您可以这样做
docker exec -it container_id python manage.py dbshell
我设法让它在linux上运行
docker run--rm-P-P 127.0.0.1:5432:5432-e POSTGRES_PASSWORD=“1234”--名称pg POSTGRES:alpine
psqlpostgresql://postgres:1234@本地主机:5432/postgres
对于mac用户,将psql替换为pgcli我尝试从本地主机(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数据库管理接口,您可以在本地计算机上安装pgAdmin,并使用其IP和postgres公开端口(默认为5432)连接到远程计算机.要从本地主机连接,需要添加“--net主机”:
docker run --name some-postgres --net host -e POSTGRES_PASSWORD=mysecretpassword -d -p 5432:5432 postgres
您可以通过以下方式直接访问服务器,而无需从本地主机使用exec:
psql -h localhost -p 5432 -U postgres
首先打开postgres的docker图像
docker exec -it <container_name>
我在Docker容器中使用django和postgres。在docker compose文件中,添加以下内容:
db:
image: postgres:10-alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=supersecretpassword
**ports:
- "6543:5432"**
这将添加本地计算机可访问的端口。对于我自己,我将DBeaver连接到它。这将防止应用程序请求和本地计算机请求之间的端口冲突。
起初,我收到一条消息说5432端口正在使用(由django应用程序使用),因此我无法通过pgAdmin或DBeaver进行访问。出于某种原因,5432端口似乎受到了保护。我将端口配置从
5432:5432
更改为5416:5432
,以下命令用于从docker容器外部连接到postgres数据库:
psql -h localhost -p 5416 -U <my-user> -d <my-database>
psql-h localhost-p5416-U-d
docker ps-a
获取容器ID
docker exec-it psql-U-W我假设您希望能够在每次从外部连接到容器时查看容器中的数据。要做到这一点,您必须在postgres图像上保存数据 如果没有持久性数据,则必须重复第一次执行的所有操作。
步骤3、5、6、7和8直接回答您的问题 下面是我在Windows 10 powershell上遵循的整个过程的详细概述(命令在Linux和macOS中也是相同的): 步骤1:在非管理模式下启动powershell 步骤2:下载postgres docker图片:
docker pull postgres:最新版本
步骤3:在分离模式下启动docker容器,通过创建卷并将其绑定到目标,在postgres映像上保留数据(注意:默认情况下,5432是使用的默认端口;但明确说明它以防止来自pgadmin、dbeaver等客户端的连接错误)
docker run--name postgres test-e postgres_PASSWORD=PASSWORD-p 5432:5432-v postgres data:/var/lib/postgresql/data-d postgres:latest
步骤4:检查正在运行的容器的状态docker ps-a
步骤5:以交互模式进入容器名称内部(注意:如果您在安装过程中检查了linux容器,则可以在此处执行ls、pwd等命令)
docker exec-it postgres测试psql-U postgres
步骤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
如果您像@Martin一样使用docker compose,我知道这很晚了
这些是帮助我在容器内连接到psql的代码片段
docker compose运行db bash
root@de96f9358b70:/#psql-hdb-U root-d postgres#U dbpsql postgresql://<username>:<databasepassword>@postgres:5432/<database>
db:
image: postgres:10-alpine
environment:
- POSTGRES_DB=app
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=supersecretpassword
**ports:
- "6543:5432"**
psql -h localhost -p 5416 -U <my-user> -d <my-database>
# CREATE DATABASE test;
# \c test
# CREATE TABLE test_table(something int);
# INSERT INTO test_table VALUES (123);
# SELECT * FROM test_table;
# \q
Host: localhost
Database: test
User: postgres
Password: password
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