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

Windows下Docker运行entrypoint.sh报语法错误:预期'do'却意外文件结束

解决Docker中entrypoint.sh在Windows下的语法错误问题

在Windows 10环境下运行Docker容器时,entrypoint.sh脚本触发以下错误:

entrypoint.sh: 12: Syntax error: end of file unexpected (expecting "do")
该脚本在macOS环境下运行正常,且已尝试将do单独换行,问题仍未解决。

Dockerfile内容

FROM python:3.10.13-slim
...
# add entrypoint.sh
COPY ./entrypoint.sh .
RUN chmod +x /usr/src/app/entrypoint.sh

# run entrypoint.sh
ENTRYPOINT ["sh", "/usr/src/app/entrypoint.sh"]

entrypoint.sh内容

#!/bin/sh

echo "Waiting for kafka..."

while ! kcat -b $KAFKA_HOST:$KAFKA_PORT -L; do
    sleep 0.1
done

echo "Kafka started"

exec "$@"

解决方案

  • 修正换行符格式
    Windows默认使用CRLF(\r\n)换行,而Linux容器中的shell仅识别LF(\n)换行,这是最常见的原因。

    • 用文本编辑器(如VS Code)打开脚本,点击状态栏的「CRLF」选项,切换为「LF」后重新保存。
    • 或者在Dockerfile中添加换行符转换命令,放在COPY之后、chmod之前:
      RUN sed -i 's/\r$//' /usr/src/app/entrypoint.sh
      
  • 调整ENTRYPOINT执行方式
    直接使用脚本自身作为ENTRYPOINT,让系统自动调用脚本开头指定的解释器:

ENTRYPOINT ["/usr/src/app/entrypoint.sh"]

需确保脚本已通过chmod +x赋予执行权限。

  • 验证脚本完整性
    检查脚本是否在Windows编辑或复制过程中被意外截断,重新保存完整的脚本内容后再构建镜像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 03:27:15