微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决无法连接到位于Docker容器中的数据库

我正在尝试在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错误已更改:

无法连接到服务器:

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

解决方法

启动数据库与尝试访问数据库之间需要等待多长时间?

即使PostgreSQL映像在本地可用,该命令也会在每次启动时重新初始化数据库文件空间-这可能需要几分钟。观看日志(删除-d)以查看日志何时真正准备就绪。

理想情况下,您应该使用Docker卷,以便立即重启。

我的 Docker for Web Developers 图书和视频课程介绍了如何设置良好的本地开发环境。使用折扣代码dock30可获得30%的折扣。

,

主机名/地址:localhost

端口:5432

您正在尝试连接到本地主机上的5432端口。您确定您的容器正在使用主机IP吗?

要使容器与主机IP一起运行,请使用--network host选项运行容器。

docker run --network host <rest of the command>

请注意,如果使用'--network host'选项,则不需要映射'-p'选项。 阅读https://docs.docker.com/network/host/了解更多信息。

,

您是否检查过是否清除了在本地运行的所有旧实例,并且没有尝试访问旧实例?

您可以使用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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?