运行docker-compose up启动Apache Airflow时遇镜像仓库名称格式错误
解决Docker Compose启动Apache Airflow时的镜像名格式错误
问题分析
你遇到的invalid reference format: repository name must be lowercase错误,核心原因是Docker强制要求镜像仓库名必须全小写。当前你的docker-compose.yaml配置存在两个关键问题:
- 依赖了不存在的
airflow-mysql镜像,且未启用自定义镜像构建逻辑; - 配置仍保留默认的PostgreSQL数据库连接,未完成MySQL的切换。
解决方案步骤
1. 调整镜像构建配置
修改x-airflow-common段的镜像设置,启用本地构建逻辑:
x-airflow-common: &airflow-common # 注释原镜像引用,启用本地构建 # image: $${AIRFLOW_IMAGE_NAME:-airflow-mysql} build: . # 其余配置保持不变
修改后,Docker Compose会自动使用当前目录的Dockerfile构建镜像,镜像名默认采用小写的项目目录名(airflow-mysql),完全符合Docker的命名规范。
2. 替换数据库服务为MySQL
删除原postgres服务,添加MySQL服务,并更新Airflow的数据库连接配置:
services: # 替换原postgres服务为mysql mysql: image: mysql:8.0 environment: MYSQL_ROOT_PASSWORD: airflow MYSQL_DATABASE: airflow MYSQL_USER: airflow MYSQL_PASSWORD: airflow volumes: - mysql-db-volume:/var/lib/mysql healthcheck: test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "airflow", "-pairflow"] interval: 10s retries: 5 start_period: 5s restart: always # 其余服务(redis、airflow-webserver等)保持不变
同时更新airflow-common-env中的数据库连接字符串:
environment: &airflow-common-env AIRFLOW__CORE__EXECUTOR: CeleryExecutor # 替换为MySQL连接字符串 AIRFLOW__DATABASE__SQL_ALCHEMY_CONN: mysql+pymysql://airflow:airflow@mysql/airflow AIRFLOW__CELERY__RESULT_BACKEND: db+mysql://airflow:airflow@mysql/airflow # 其余环境变量保持不变
3. 更新卷配置
将原PostgreSQL卷替换为MySQL卷:
volumes: mysql-db-volume:
4. 构建并启动服务
执行以下命令完成镜像构建和服务启动:
# 构建自定义Airflow镜像 docker-compose build # 启动所有服务 docker-compose up
额外说明
Mac系统路径中的大写目录(如Users、Denzel)不会影响Docker的挂载和运行,无需修改系统目录;你的Dockerfile已经包含MySQL provider依赖,无需额外调整。
内容的提问来源于stack exchange,提问作者Denzel
相关产品推荐
相关产品推荐

