【问题标题】:connect to dockerized sql from host: Access denied从主机连接到 dockerized sql:访问被拒绝
【发布时间】:2020-07-11 17:06:07
【问题描述】:

我很抱歉再打开一个“无法连接到我的数据库”问题,但搜索了几个小时后我还是没有得到它。

我希望(非 dockerized)invoicePlane 应用程序使用 dockerized 数据库。

所以我正在使用以下 docker-compose.yml

version: '2'

services:
  db:
      image: mariadb:latest 
      #also tried mysql:latest
      restart: always
      environment:
          MYSQL_DATABASE: 'invoiceplane_db'
          MYSQL_USER: 'invoiceplane'
          MYSQL_PASSWORD: 'pass1'
          MYSQL_ROOT_PASSWORD: 'pass0'
      expose:
          - '3306'
      volumes:
          myserver/path:/var/lib/mysql
volumes:
    invoiceplane-db:

以sudo docker-compose -f docker-compose.yml up开头

从容器内部,一切正常。我可以连接,例如通过mysql -uroot -ppass0,查看

+--------------+-----------+
| User         | Host      |
+--------------+-----------+
| invoiceplane | %         |
| root         | %         |
| root         | localhost |
+--------------+-----------+
3 rows in set (0.004 sec)

现在我想从主机访问数据库,尝试

mysql invoiceplane_db_1:3306 -uroot -ppass0

invoiceplane_db_1 是容器的名称。

但我总是得到:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

通过我的网络搜索,我得到的印象是这可能与容器的/etc/mysql/my.cnf 中的bind-address 有关,例如here。但我没能做对。最初,该参数被注释掉。我将其设置为bind-address = 127.0.0.1 并重新启动了容器。它没有帮助。

我在这里遗漏了什么吗?

【问题讨论】:

  • 你应该将你暴露的容器端口映射到一个主机端口

标签: mysql docker docker-compose mariadb


【解决方案1】:

这是我为 mariadb 工作的 docker-composer:

db:
  image: mariadb:10.4
  ports:
    - "3306:3306"
  volumes:
    - db-storage:/var/lib/mysql
  environment:
    MYSQL_ROOT_PASSWORD: root-pass
    MYSQL_USER: my-user
    MYSQL_PASSWORD: my-user-pass
    MYSQL_DATABASE: my-database

从外观上看,您似乎缺少端口映射:3306:3306

【讨论】:

  • 感谢您的回复。我确实尝试过。由于主机上的 3306 端口已经在使用中,我将其映射到 3307,所以- "3307:3306。拒绝访问仍然存在。当我在浏览器中输入 localhost:3307 时,我得到了响应,所以连接应该在那里。
  • 这是我的连接网址:jdbc:mariadb://localhost:3306/my-database 使用 my-user 和 my-user-pass。您可以尝试使用invoiceplane 用户和密码而不是root 进行连接吗?此外,检查此链接可能会有所帮助:stackoverflow.com/a/58040022
  • 我理解正确吗?我试过mysql localhost:3307/invoiceplane_db -uinvoiceplane -ppass1,我什至试过mysql jdbc:mariadb://localhost:3307/invoiceplane_db -uinvoiceplane -ppass1,我认为这不太可能奏效。还是一样:拒绝访问。
猜你喜欢
  • 2017-01-12
  • 2016-03-26
  • 1970-01-01
  • 2015-06-21
  • 2020-12-31
  • 1970-01-01
  • 2020-05-29
  • 2023-01-14
  • 1970-01-01
相关资源
最近更新 更多