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

启动Nginx Docker容器时出现/docker-entrypoint.sh不存在错误

解决Docker启动Nginx容器时/docker-entrypoint.sh不存在的问题

你遇到的错误属于典型的「文件存在但无法执行」场景,核心原因通常是脚本行尾格式不兼容或权限配置缺失,以下是具体排查和解决方法:

1. 修复脚本的行尾换行符

如果你的docker-entrypoint.sh是在Windows环境下创建的,默认会使用CRLF(\r\n)作为换行符,但Linux容器仅识别LF(\n)。此时容器执行脚本时会把行尾的\r当成文件名的一部分,实际寻找的是/docker-entrypoint.sh\r,自然提示文件不存在。

解决方式:

  • 用文本编辑器(VS Code、Notepad++等)打开脚本,将换行格式切换为LF:
    • VS Code:点击右下角的「CRLF」,选择「LF」
    • Notepad++:依次点击「编辑」→「文档格式转换」→「转为UNIX格式」
  • 或者在Dockerfile中添加自动修复命令,在COPY脚本后执行:
    COPY --chown=oracle:oracle docker-entrypoint.sh /
    RUN sed -i 's/\r$//' /docker-entrypoint.sh  # 移除所有行尾的\r字符
    

2. 赋予脚本执行权限

即使文件存在,没有执行权限也可能触发类似错误(部分场景下权限不足会被系统伪装成「文件不存在」)。在Dockerfile中添加权限设置:

COPY --chown=oracle:oracle docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh

3. 调整USER指令的位置

当前Dockerfile中ENTRYPOINT定义在USER之前,但容器执行ENTRYPOINT时会使用后续切换的oracle用户。如果脚本需要执行一些依赖root权限的初始化操作,可能会因权限不足导致执行失败。可以将USER ${USER}移到ENTRYPOINT之后(适用于脚本无需root权限的场景):

COPY --chown=oracle:oracle docker-entrypoint.sh /
RUN chmod +x /docker-entrypoint.sh
ENTRYPOINT ["/docker-entrypoint.sh"]

USER ${USER}
WORKDIR /app
STOPSIGNAL SIGQUIT
EXPOSE 8000
CMD ["nginx", "-g", "daemon off;"]

验证步骤

修改后重新构建并启动容器测试:

docker build -t my-nginx-image .
docker run -d -p 8000:8000 my-nginx-image

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 04:50:39