使用服务名称作为用户主机的MYSQL连接错误

时间:2018-02-14 14:29:12

标签: mysql docker

我有几个需要连接到mysql容器的容器。对于此示例,我将使用我的webapi容器。目前,如果我的“test”用户host设置为mysql用户表中容器的IP(172.18.0.4),我可以这样做。

我的理解是我可以使用docker-compose文件中的服务名称,因为它们将位于同一网络上,因此不依赖于IP。虽然我将“test”用户的host更改为容器的服务名称,例如webapi。我被抛出一个mysql错误。

SQLSTATE[HY000] [1045] Access denied for user 'test'@'172.18.0.4' (using password: YES)

我的docker-compose文件为

version: '2.3'
services:
webapp:
  image: webapp:0.3
  networks:
    - frontend
  depends_on:
    - database
webapi:
  image: webapi:0.2
  networks:
    - frontend
  depends_on:
    - database
database:
  image: database:0.1
  networks:
    - frontend
    - backend
  volumes:
    - mysql-data:/var/lib/mysql
networks:
  frontend:
    external: true
  backend:
    external: true
volumes:
  mysql-data:
   external:
    name: mysql-data

我做错了什么或者我对能否使用服务名称作为MYSQL用户host的理解不正确?

数据库映像是从官方MariaDB dockerfile构建的。

1 个答案:

答案 0 :(得分:1)

我发现了这个,但忘了回复。有趣的是,dockerfile设置了 skip-name-resolve ,它禁用了DNS主机名查找。

我发现这有点奇怪,因为docker推动开发人员使用容器名称作为DNS记录......

因此,如果您遇到此问题,请将其回显的行删除到Dockerfile底部附近的.cnf文件中。