从主机连接到dockerized sql:访问被拒绝

时间:2020-03-31 07:45:49

标签: mysql docker docker-compose mariadb

很抱歉再次提出“无法连接到数据库”的问题,但是搜索了几个小时之后,我还是没收到。

我希望(非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)

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

我在这里想念什么吗?

1 个答案:

答案 0 :(得分:0)

这是我为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