我有一个PostgreSQL容器设置,我可以成功地连接到与管理员,但我得到一个身份验证错误时,试图通过类似DBeaver使用相同的凭据连接。
我已经尝试在Dockerfile中暴露端口5432,并且可以在Windows for Docker上看到正确绑定的端口。我猜因为这是一个身份验证错误,所以问题不是服务器无法看到,而是用户名或密码?
Docker Compose文件和Dockerfile看起来像这样。
version: "3.7"
services:
db:
build: ./postgresql
image: postgresql
container_name: postgresql
restart: always
environment:
- POSTGRES_DB=trac
- POSTGRES_USER=user
- POSTGRES_PASSWORD=1234
ports:
- 5432:5432
adminer:
image: adminer
restart: always
ports:
- 8080:8080
nginx:
build: ./nginx
image: nginx_db
container_name: nginx_db
restart: always
ports:
- "8004:8004"
- "8005:8005"
字符串
Dockerfile:(Dockerfile稍后将用于复制SSL证书和密钥)
FROM postgres:9.6
EXPOSE 5432
型
想知道是否有其他的东西,我应该做的,使这一工作通过一些其他的实用程序?
任何帮助将是伟大的。
先谢了。
更新:
尝试通过postgresql容器172.28.0.3的IP访问数据库,但连接超时,这表明PostgreSQL正在正确地侦听0.0.0.0:5432,并且由于某种原因,用户和密码在Docker之外无法使用,即使从使用localhost的主机也是如此。
4条答案
按热度按时间xzlaal3s1#
检查Postgres数据文件夹中的pg_hba.conf文件。默认配置是只能从本地主机登录(我假设Adminer正在这样做),而不能从外部IP登录。
为了允许通过密码验证从所有外部地址进行访问,请将以下行添加到pg_hba.conf:
字符串
然后,您可以从外部连接到在docker容器中运行的postgres DB,只要您公开端口(5432)
lrl1mhuk2#
使用命令
docker container inspect ${container_number}
,这将告诉您哪些IP地址:端口暴露在容器外部。命令'docker container ls'将帮助识别'container number'
pvcm50d13#
在更新了我的默认db_name之后,我还必须像OP那样显式地公开端口,从而更新docker-compose
字符串
但是这里的关键是重新启动服务器!DBeaver已经连接到localhost:5432:)
nkkqxpd94#
1.在docker compose中将Volume挂载添加到本地文件库
字符串
1.在
~/tmp/data/pg_hba.conf
中编辑文件,将数据IP设置为127.0.0.1/32
,只需使用0.0.0.0/32
即可。