无法连接到位于Docker容器中的数据库

时间:2020-10-11 07:24:26

标签: postgresql docker docker-compose docker-for-windows

我正在尝试在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连接到它时:

  • 主机名/地址:localhost
  • 端口:5432
  • 维护数据库:db
  • 用户名:root
  • 密码:root

它对我说:

无法连接到服务器:

致命:用户“ root”的密码身份验证失败


我的操作系统:Windows 10 build(1809)

PostgreSQL版本(安装在本地计算机上):12

Docker版本:19.03.13,内部版本4484c46d9d


UPD 1:

重新创建具有不同端口的容器(现在是5433:5433)后,pgAdmin4错误已更改:

无法连接到服务器:

服务器意外关闭了连接 这可能意味着服务器异常终止 在处理请求之前或期间。

3 个答案:

答案 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容器

环境干净后,您可以尝试在本地重新启动容器,并查看是否可以访问该服务。我将您所拥有的内容复制/粘贴到干净的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