You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行docker-compose启动Airflow2.0时airflow-entrypoint.sh权限被拒绝如何解决

问题原因

这个报错是因为airflow-entrypoint.sh脚本没有可执行权限,你通过docker-compose把本地./scripts目录挂载到了容器的/opt/airflow/scripts路径,容器启动时调用该脚本没有执行权限导致启动失败。

解决方案

你可以根据自己的使用场景选择以下任意一种方案:

方案1:直接修改本地脚本权限(推荐,适合开发环境经常修改脚本的场景)

在你的项目根目录执行本地命令赋予脚本执行权限即可:

chmod +x ./scripts/airflow-entrypoint.sh

修改完成后重新执行docker-compose up --build即可正常启动。

方案2:修改docker-compose启动命令,无需改权限

如果不想修改本地文件权限,可以直接修改docker-compose.yml中webserver和scheduler服务的entrypoint配置,用bash直接调用脚本:
原来的配置:

entrypoint: ./scripts/airflow-entrypoint.sh

修改为:

entrypoint: ["bash", "./scripts/airflow-entrypoint.sh"]

方案3:将脚本打包进镜像(适合生产环境不需要本地挂载修改脚本的场景)

如果你不需要本地挂载scripts目录实时修改脚本,可以按以下步骤操作:

  1. 修改Dockerfile,添加复制脚本和赋予权限的步骤,注意要在USER切换到普通用户之前操作:
FROM apache/airflow
USER root
ARG AIRFLOW_HOME=/opt/airflow
ADD dags /opt/airflow/dags
# 新增:复制本地scripts目录到镜像内
ADD scripts /opt/airflow/scripts
# 新增:赋予脚本执行权限
RUN chmod +x /opt/airflow/scripts/airflow-entrypoint.sh
RUN pip install --upgrade pip
RUN chown -R airflow:airflow $AIRFLOW_HOME
USER airflow
RUN pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org boto3
USER ${AIRFLOW_UID}
  1. 删除docker-compose.yml中scheduler和webserver服务下的- ./scripts:/opt/airflow/scripts volume挂载配置,避免本地目录覆盖镜像内的脚本。
额外优化建议

你当前的entrypoint脚本硬编码了启动scheduler和webserver两个进程,但你在docker-compose中将scheduler和webserver拆成了两个独立服务,会导致两个服务都同时启动两个进程,出现冲突,而且你配置的command参数会完全失效。建议修改entrypoint脚本如下:

#!/usr/bin/env bash
airflow db init
airflow db upgrade
# 仅在webserver服务启动时执行用户创建,避免重复执行
if [ "$1" = "webserver" ]; then
  airflow users create -r Admin -u admin -e MY_EMAIL -f MY_FIRSTNAME -l MY_LASTNAME -p admin
fi
exec "$@"

修改后两个服务会各自执行command配置的启动命令,不会重复启动进程。

内容的提问来源于stack exchange,提问作者Shadow Walker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 07:27:00