mysql - docker compose 中的 Airflow + MySQL - 未知主机和访问被拒绝
问题描述
气流和mysql设置的新手在这里。我正在尝试以 MySQL 作为后端在 docker-compose 中设置气流。
我有我的 mySQL 连接字符串,sql_alchemy_conn_cmd=mysql://localuser:localpassword@mock_mysql/metastore
如airflow.cfg
我有我docker-compose.yml
的
version: "3.9"
networks:
airflow:
services:
redis_local:
image: redis:latest
container_name: redis_server
ports:
- 6379:6379
command: redis-server
restart: on-failure
networks:
- airflow
mysql_local:
image: mysql:5.7
container_name: mysql_local
environment:
- MYSQL_ROOT_HOST=%
- MYSQL_USER=localuser
- MYSQL_PASSWORD=localpassword
- MYSQL_ROOT_PASSWORD=localpassword
- MYSQL_DATABASE=metastore
volumes:
- ./script/init.sql:/data/application/init.sql
- ./dbdata:/var/lib/mysql
ports:
- 3306:3306
restart: on-failure
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 1s
retries: 10
command:
--init-file /data/application/init.sql
--explicit_defaults_for_timestamp=1
networks:
- airflow
airflow_init_db:
depends_on:
- redis_local
- mysql_local
container_name: airflow_init_db
image: apache/airflow:2.0.0-python3.8
command: airflow initdb
由于它连接到metastore
数据库,因此需要在数据库启动时在 mysql 中设置数据库。我有我的 init.sql 作为
CREATE DATABASE IF NOT EXISTS metastore;
CREATE USER 'localuser'@'localhost' IDENTIFIED BY 'localpassword';
GRANT ALL PRIVILEGES ON metastore . * TO 'localuser'@'localhost';
FLUSH PRIVILEGES;
然而,从健康检查来看,mysql 本身失败了
mysql_local | 2021-07-06T04:29:04.011037Z 3 [Note] Access denied for user 'root'@'localhost' (using password: NO)
初始化数据库和调度程序都失败了
sqlalchemy.exc.OperationalError: (MySQLdb._exceptions.OperationalError) (2005, "Unknown MySQL server host 'mock_mysql' (-2)")
我不确定此时缺少什么。非常感谢任何帮助!谢谢
解决方案
两个问题。
您应该在连接字符串中使用 mysql_local 作为主机名,而不是 mock_mysql,因为这是您的 MySQL 容器的名称(并且 this.is 由 docker-compose 在 DNS 中定义的名称)
您使用的 healthecheck 假定无密码身份验证,并且可能在 MySQL 的默认 db 映像中它是.disabled 以确保安全。您应该将用户/密码 as.parameters 传递给您的 healthecheck 命令或启用 root 无密码身份验证
推荐阅读
- azure - Azure DevOps Pipeline 中的 Terraform 获取订阅超时
- macos - Quasar Electron 构建无法在具有 arm64 架构的 M1 mac mini 上运行
- powershell - 开始睡眠意外行为
- excel - 在Excel VBA上用引号打印单元格值的写入函数
- python - 如何读取文本文件中的特定行?
- javascript - 如何使用护照本地猫鼬更改密码?
- javascript - Jquery/JS - 根据值属性查找输入并触发点击
- android - Android Studio EditText 不能为空错误
- javascript - JS:我需要 3 个标题才能点击/标题变成蓝色。事件监听器问题
- flutter - 在颤振中自动检测我的应用是否收到短信