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

Docker入口脚本在Linux环境找不到文件,但macOS正常问题排查

问题排查与解决

原因1:换行符不兼容

macOS默认使用CRLF换行格式,而Linux系统要求Shell脚本必须使用LF换行。当镜像在EKS的Linux节点运行时,CRLF会被当作脚本路径的一部分,导致系统无法正确识别脚本文件,最终抛出"文件不存在"的错误。

解决方法:

  • 用文本编辑器(如VS Code)打开entrypoint.sh,点击右下角的CRLF标识,切换为LF后保存。
  • 或者在Docker构建阶段自动转换:如果基础镜像基于Debian/Ubuntu,添加以下命令:
    RUN apt-get update && apt-get install -y dos2unix && dos2unix entrypoint.sh && rm -rf /var/lib/apt/lists/*
    
    如果是Alpine镜像,替换为:
    RUN apk add --no-cache dos2unix && dos2unix entrypoint.sh
    

原因2:脚本缺少执行权限

虽然你设置了文件的所有者,但可能未给脚本添加执行权限。Linux系统无法执行无权限的脚本,也会触发类似"文件不存在"的错误提示。

解决方法:

在Dockerfile的COPY命令后添加权限设置:

COPY --chown=my-service:my-service entrypoint.sh entrypoint.sh
RUN chmod +x entrypoint.sh  # 添加执行权限
COPY --chown=my-service:my-service target/my-service-0.0.1-SNAPSHOT.jar my-service.jar

或者使用Docker 17.09+支持的直接指定权限的写法:

COPY --chown=my-service:my-service --chmod=755 entrypoint.sh entrypoint.sh

额外优化建议

  • 由于已经设置WORKDIR /home/my-service,ENTRYPOINT可以简化为["./entrypoint.sh"],避免绝对路径拼写失误。
  • 本地构建前可先验证脚本状态:执行file entrypoint.sh,正常的Shell脚本会显示entrypoint.sh: Bourne-Again shell script, ASCII text executable。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 00:47:09