我在服务器上的docker容器中有Postgresql。我如何从外部,也就是从我的本地计算机连接到它?我应该应用什么设置来允许这样做?
当前回答
我尝试从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(映射一个端口):
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中运行)。
在这篇文章中详细解释了这一点。
我设法让它在linux上运行
运行docker postgres -确保端口被发布,我使用alpine是因为它是轻量级的。 docker run——rm -P 127.0.0.1:5432:5432 -e POSTGRES_PASSWORD="1234"——name pg postgres:alpine 使用另一个终端,使用postgres uri从主机访问数据库 psql postgresql: / / postgres: 1234 @localhost: 5432 / postgres
MAC用户请将PSQL替换为pgcli
我已经在主机上运行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
Docker ps -a来获取容器id docker exec -它的psql -U -W
在构建我的网关微服务应用程序后,我也遇到了同样的问题。无法从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
参考链接和截图张贴
推荐文章
- 查询JSON类型内的数组元素
- 获得PostgreSQL数据库中当前连接数的正确查询
- 纬度和经度的数据类型是什么?
- 如何在PostgreSQL中临时禁用触发器?
- 输入文件似乎是一个文本格式转储。请使用psql
- 试图连接到https://index.docker.io时,网络超时
- 使用LIMIT/OFFSET运行查询,还可以获得总行数
- 当恢复sql时,psql无效命令\N
- 货币应该使用哪种数据类型?
- 如何添加列,如果不存在PostgreSQL?
- 如何在Postgres中获得两个字段的MIN() ?
- 为每个Docker图像查找图层和图层大小
- 如何避免在为Python项目构建Docker映像时重新安装包?
- 截断Postgres数据库中的所有表
- 如何用docker-compose更新现有图像?