我正在尝试在docker容器中创建PostgreSQL DB并从本地计算机连接到它。在docker-compose up -d
内部运行docker-compose.yml
:
version: '3.5'
services:
db:
image: postgres:12.2
restart: always
ports:
- "5432:5432"
environment:
POSTGRES_DB: db
POSTGRES_USER: root
POSTGRES_PASSWORD: root
成功结束。没有崩溃,没有错误。但是,当我尝试使用具有以下凭据的pgAdmin4
连接到它时:
它对我说:
无法连接到服务器:
致命:用户“ root”的密码身份验证失败
我的操作系统:Windows 10 build(1809)
PostgreSQL版本(安装在本地计算机上):12
Docker版本:19.03.13,内部版本4484c46d9d
UPD 1:
重新创建具有不同端口的容器(现在是5433:5433)后,pgAdmin4
错误已更改:
无法连接到服务器:
服务器意外关闭了连接 这可能意味着服务器异常终止 在处理请求之前或期间。
答案 0 :(得分:0)
启动数据库与尝试访问数据库之间需要等待多长时间?
即使PostgreSQL映像在本地可用,该命令也会在每次启动时重新初始化数据库文件空间-这可能需要几分钟。观看日志(删除-d
)以查看日志何时真正准备就绪。
理想情况下,您应该使用Docker卷,以便立即重启。
我的 Docker for Web Developers 图书和视频课程介绍了如何设置良好的本地开发环境。使用折扣代码dock30
可获得30%的折扣。
答案 1 :(得分:0)
主机名/地址:localhost
端口:5432
您正在尝试连接到本地主机上的5432端口。您确定您的容器正在使用主机IP吗?
要使容器与主机IP一起运行,请使用--network host选项运行容器。
docker run --network host <rest of the command>
请注意,如果使用'--network host'选项,则不需要映射'-p'选项。 阅读https://docs.docker.com/network/host/了解更多信息。
答案 2 :(得分:0)
您是否检查过是否清除了在本地运行的所有旧实例,并且没有尝试访问旧实例?
您可以使用docker rm -f $(docker ps -aq)
环境干净后,您可以尝试在本地重新启动容器,并查看是否可以访问该服务。我将您所拥有的内容复制/粘贴到干净的docker-compose.yaml
中,并针对该文件运行了docker-compose up
-它起作用了,我登录并能够查看pg_user
表。
如果仍然失败,则可以尝试使用以下命令查找IP:netstat -in | grep en0
,它会显示类似的内容
en0 1500 192.168.1 **192.168.1.163** 15301832 - 9001208 - - -
这显示了容器的外部/可访问IP。尝试使用显示的地址(类似于192.168.1.163)代替localhost