如何将 Grafana 的 Docker 容器连接到 MySql 的 Docker 容器?

Posted

技术标签:

【中文标题】如何将 Grafana 的 Docker 容器连接到 MySql 的 Docker 容器?【英文标题】:How to connect a Docker container of Grafana to a Docker conatiner of MySql? 【发布时间】:2019-01-25 18:32:49 【问题描述】:

我希望设置 2 个 docker 容器:grafana 和 mysql,并允许从 grafana 到 mysql db 的查询。 我有一台 AWS 机器,我在其中构建了以下文件夹结构:

- docker
  - docker-compose.yml
  - grafana:
    - config.ini
    - dashboards:
      - grafana_dashboard.json
    - provisioning:
      - dashboards:
        - all.yml
      - datasources:
        - all.yml
    - Dockerfile
  - mysql:
    - dbcreation.sql
    - Dockerfile
  - dashboards:
  - import.sh

docker-compose.yml 的内容是:

version: '2'
services:
  db-service:
    build: './mysql'
    container_name: mysql
    restart: always
    ports:
      - "3306:3306"
    networks:
      net:
        ipv4_address: 172.16.1.3

  grafana-service:
    build: './grafana'
    container_name: grafana
    restart: always
    ports:
      - "3000:3000"
    environment:
      GF_SECURITY_ADMIN_PASSWORD: "XXX1"
      GF_AUTH_PROXY_ENABLED: "true"
      GF_SECURITY_DATA_SOURCE_PROXY_WHITELIST: 172.16.1.3:3306
      GF_AUTH_ANONYMOUS_ENABLED: "true"
      GF_LOG_LEVEL: "debug"
    depends_on:
      - db-service
    networks:
      net:
        ipv4_address: 172.16.1.4


networks:
  net:
    external: true

volumes:
  grafanadata:
    driver: local
  mysqldata:

grafana 的 dockerfile:

FROM grafana/grafana:5.2.2
ADD ./provisioning /etc/grafana/provisioning
ADD ./dashboards /var/lib/grafana/dashboards
ENV DS_DB "grafana"

mysql/Dockerfile的内容是:

FROM mysql:8.0.12

ENV MYSQL_ROOT_PASSWORD="XXX2"
ENV MYSQL_DATABASE="grafana"

ADD ./dbcreation.sql /docker-entrypoint-initdb.d/dbcreation.sql
EXPOSE 3306

grafana_dashboard.json 文件包含从我在自己的计算机上本地设置的 Grafana 导出的 json。 dbcreation.sql 文件包含从我在自己的计算机上本地设置的本地数据库中导出的数据。

我正在运行以下命令:

docker network create --gateway 172.16.1.1 --subnet 172.16.1.0/24 net
docker-compose up --build 

我收到一个错误:“不支持身份验证插件”

在将 Grafana 的日志级别转为调试时,我看到:

t=2018-08-19T10:55:20+0000 lvl=dbug msg=getEngine logger=tsdb.mysql connection="root:XXX2@tcp(172.16.1.3:3306)/grafana?collation=utf8mb4_unicode_ci&parseTime=true&loc=UTC&allowNativePasswords=true"

t=2018-08-19T10:55:47+0000 lvl=eror msg="Request Completed" logger=context userId=1 orgId=1 uname=admin method=POST path=/api/tsdb/query status=500 remote_addr=XX.XXX.XXX.XXX time_ms=2 size=195 referer=http://XX.XXX.XXX.XXX:3000/datasources/edit/1

我已经使用以下来源进行了设置: https://ops.tips/blog/initialize-grafana-with-preconfigured-dashboards/

https://storage.pardot.com/138181/61672/mysql_on_docker_how_to_containerize_your_database.pdf

任何帮助将不胜感激! 谢谢

【问题讨论】:

【参考方案1】:

如此处所述:

go-mysql: authentication plugin not supported while connecting from go app container to mysql container

问题在于 Grafana 版本和 MySQL 版本之间的兼容性。 一旦移动到 docker image mysql:5.7(也必须迁移数据) - 问题就解决了(还需要更改数据库中的 COLLATION 和 CHAR_SET 以从版本 8.0.12 降级到 5.7)。

【讨论】:

以上是关于如何将 Grafana 的 Docker 容器连接到 MySql 的 Docker 容器?的主要内容,如果未能解决你的问题,请参考以下文章

如何将在 Docker 容器中运行的 Grafana 连接到在主机上运行的 Prometheus 数据源(在 Docker for Mac 上)?

容器监控指南:三剑客轻松实现 Docker 容器监控

在 Grafana 中为 Docker 容器构建 CPU 使用率图

如何使用 slack/grafana 或任何其他自动化方式重新启动 docker 容器?

(转)使用InfluxDB+cAdvisor+Grafana配置Docker监控

在容器上丢失 grafana 仪表板或 docker restart [Windows+docker+grafana]