我设置了一个PostgreSQL容器,可以成功与Adminer连接,但是在尝试使用相同的凭据通过诸如DBeaver之类的东西进行连接时遇到验证错误。
我尝试在Dockerfile中公开端口5432,并且可以在Windows的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之外也不可用。从主机使用本地主机。
答案 0 :(得分:1)
检查Postgres数据文件夹中的pg_hba.conf文件。 默认配置是您只能从localhost(我假设管理员正在这样做)登录,而不能从外部IP登录。
为了允许通过密码验证从所有外部地址进行访问,请将以下行添加到pg_hba.conf中:
host all all * md5
然后,您只要暴露端口(5432),就可以从外部连接到在docker容器中运行的postgres数据库
答案 1 :(得分:0)
使用命令docker container inspect ${container_number}
,这将告诉您哪些IPaddress:端口暴露在容器外部。
命令“ docker container ls”将帮助识别“容器编号”