Dockerfile 找不到入口脚本。

4

我希望在dockerfile中使用bash脚本作为入口点。代码如下:

ENV INST  INIT
ADD start.sh /start.sh
RUN chmod 777 /start.sh
ENTRYPOINT /start.sh $INST

应该是正确的。但当我构建图像并运行它时,结果如下:
/bin/sh: 1: /start.sh: not found

请问有人能帮忙吗?谢谢。 完整的 Dockerfile 内容如下:

FROM debian:latest

ENV INST  INIT
RUN apt-get update
RUN apt-get install -y git build-essential gcc g++ vim 


RUN mkdir /Lab-C-Framework
WORKDIR /Lab-C-Framework
ADD Lab-C-Framework /Lab-C-Framework
RUN make install
RUN chmod 777 -R /Lab-C-Framework

RUN mkdir /project
ADD bin /project
ADD src /project
ADD header /project
ADD tests /project
ADD Docs /project
ADD Makefile /project
RUN chmod 777 -R /project

ADD start.sh /start.sh
RUN chmod 777 /start.sh

RUN mkdir /code
RUN chmod 777 /code
VOLUME /code 
WORKDIR /code


ENTRYPOINT /start.sh $INST

1
我会将脚本添加到容器的/bin目录中,并使用start.sh作为入口点,但不需要加上/。 - Raman Sailopal
2个回答

4

看起来你的 /start.sh 脚本中的第一行指向了不存在的东西。如果是 #!/bin/bash,则需要在镜像中安装 bash。如果你的 shell 已经安装在容器中,请确保你的第一行没有 Windows 的换行符。


谢谢这个,节省了我的时间! - hereandnow78
错误的行结尾是问题所在。哇!我自己想不出来。这种情况下,误导性的错误消息比晦涩难懂的消息更糟糕。 - Yar

3
你可以尝试使用以下方式设置入口点:
COPY start.sh /start.sh
RUN chmod +x /start.sh
ENTRYPOINT ["/start.sh", "$INST"]

如果您可以编辑start.sh脚本,那么您可以直接从环境中读取$INST变量,而无需将其作为参数传递。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接