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

GitHub Actions使用Docker镜像部署Azkaban失败报错127

GitHub Actions 结合 Docker 部署 Azkaban 报错 exit code 127 解决方案

错误日志

./docker-run.sh: 4: cd: can't cd to target/deployment
chmod: cannot access './script.sh': No such file or directory
./docker-run.sh: 6: ./docker-run.sh: ./script.sh: not found
Error: Error: The process '/usr/bin/docker' failed with exit code 127

根因排查

这三个报错是连锁反应,核心是第一步切目录直接失败,后面所有基于相对路径的操作全错,最后触发Linux系统里「命令/文件找不到」的标准退出码127,问题基本出在这几个地方:

  • 路径基准不匹配
    • cd: can't cd to target/deployment90%的情况是相对路径基准乱了:docker-run.sh里写的相对路径,基准是容器内的工作目录(也就是Dockerfile里WORKDIR配置的值),既不是GitHub Actions运行器的宿主机项目路径,也不是你本地开发机的项目路径。
    • 先查有没有把target/deployment目录真的打进镜像、或者挂载进容器:如果Dockerfile里没写COPY target/deployment <容器内目标路径>,或者构建镜像前没跑项目打包命令(Maven package/Gradle build之类)生成这个目录,容器里根本不可能有这个路径。
  • 文件位置/格式错误
    • 切目录失败后,执行上下文会停在容器默认工作目录,这个目录下没放script.sh,自然报找不到。就算你把script.sh打进镜像了,放的路径和脚本里写的预期路径对不上,一样会报错。
    • 别漏了行尾格式的坑:如果sh脚本是在Windows下写的,默认行尾是CRLF格式,Linux容器识别不了,哪怕文件真实存在也会抛not found错误。
  • GitHub Actions 配置漏项
    • 如果是用docker run -v挂载宿主机目录的方式跑容器,别写相对路径,Actions运行器里的项目绝对路径要取${{ github.workspace }}变量,写相对路径挂载根本找不到宿主机上的对应目录。

修复方案

  1. 先改docker-run.sh,加调试配置,固定脚本的路径基准,从根源避免相对路径错乱,参考写法:
#!/bin/bash
set -ex
# 自动定位脚本自身所在的绝对路径,不管从什么路径触发脚本都不会乱
SCRIPT_PATH=$(cd "$(dirname "$0")"; pwd)
# 切目录失败直接退出,别继续跑后面的逻辑
cd "${SCRIPT_PATH}/target/deployment" || exit 1
chmod +x ./script.sh
./script.sh
  1. 改Dockerfile配置,确保所有文件都复制到容器内的对应路径:
# 按需替换成你自己用的基础镜像
FROM openjdk:8-jre-slim
# 固定容器内的工作目录
WORKDIR /opt/deploy
# 按路径复制脚本和构建产物,和docker-run.sh里的逻辑一一对应
COPY docker-run.sh .
COPY script.sh .
COPY target/deployment ./target/deployment
# 提前给好执行权限,不用等运行的时候再chmod
RUN chmod +x docker-run.sh script.sh
ENTRYPOINT ["./docker-run.sh"]
  1. 调整GitHub Actions工作流配置:
    • 确认构建镜像的步骤之前,已经跑完了项目打包命令,生成了完整的target/deployment目录
    • 如果用挂载方式运行容器,挂载路径必须写绝对路径,示例:
      - name: Run deploy container
        run: docker run -v ${{ github.workspace }}/target/deployment:/opt/deploy/target/deployment your-deploy-image:latest
      
    • 如果是Windows环境提交的代码,加一步转换脚本行尾的操作:
      - name: Fix script line ending
        run: |
          apt-get update && apt-get install -y dos2unix
          dos2unix *.sh
      

验证方法

先在本地项目根目录跑docker build . -t azkaban-deploy-test && docker run --rm azkaban-deploy-test,本地跑通了再推到Actions上执行,别反复提交CI调试浪费时间。如果还是提示找不到文件,就在docker-run.sh里加一行find / -name "script.sh",打印出文件在容器内的实际绝对路径,对着改路径就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 22:06:23