docker-compose配置Airflow entrypoint.sh报OCI运行时找不到文件错误
报错根因
该报错和entrypoint.sh的执行权限无关,核心是entrypoint配置的路径和容器内部实际文件路径不匹配。
对照你的配置逻辑拆解:
- 你的卷映射规则是:宿主机
./airflow/scripts挂载到容器内/opt/airflow/scripts,因此entrypoint.sh在容器内的真实绝对路径为/opt/airflow/scripts/entrypoint.sh。 - 当前配置的entrypoint值为
./airflow/scripts/entrypoint.sh,这类相对路径会以容器内的默认工作目录(官方apache/airflow 1.10.14镜像的默认工作目录为/opt/airflow)为基准解析,最终拼接出的路径是/opt/airflow/airflow/scripts/entrypoint.sh,该路径在容器内不存在,因此触发stat no such file or directory的启动失败。
修复方案
- 修改webserver服务的entrypoint配置,二选一即可匹配容器内的实际文件路径:
# 方案1:使用容器内的绝对路径(*推荐*,可读性强) entrypoint: /opt/airflow/scripts/entrypoint.sh # 方案2:适配容器默认工作目录的相对路径 entrypoint: ./scripts/entrypoint.sh - 配置修改完成后,先执行命令验证挂载有效性:
docker-compose run --rm webserver ls -l /opt/airflow/scripts/entrypoint.sh
能正常返回文件信息,即可正常启动服务。
常见附加踩坑点
- 路径修正后如果仍报执行类错误,检查entrypoint.sh的换行符格式:如果是在Windows环境下编辑的脚本,默认保存的CRLF格式换行会导致shell解析失败,将脚本换行符改为Unix标准LF格式即可解决。
- 容器内执行的所有命令、路径,都以容器自身的文件系统结构为准,不能直接套用宿主机的目录层级逻辑:卷映射配置中冒号前是宿主机路径,冒号后是容器内路径,两者没有强制的层级对应关系。
内容的提问来源于stack exchange,提问作者Oliver Wills
相关产品推荐
相关产品推荐

