未找到 Docker 映像入口点脚本

2023-12-27

我有一个Dockerfile like:

FROM frolvlad/alpine-oraclejdk8:slim
ADD build/libs/zuul*.jar /app.jar
ADD src/main/script/startup.sh /startup.sh
EXPOSE 8080 8999
ENTRYPOINT ["/startup.sh"]

startup.sh好像:

#!/bin/sh
set -e

if [ $# -eq 0 ]
then
    echo "Environment value required"
    exit 1
fi

java -jar -Xms400m -Xmx400m -Dlog4j.configurationFile=log4j2-qa2.xml -Djava.security.egd=file:/dev/./urandom -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8999 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.rmi.port=8999 app.jar

但是当我运行它时docker run, I got docker: Error response from daemon: Container command '/startup.sh' not found or does not exist..。 shell脚本有执行权限。

我用同样的方式运行我的其他应用程序,它们都工作正常。我在 Mac 中编写了这些文件,并尝试在 Linux 计算机中运行该容器。


事实证明是^M导致问题的 DOS 风格行结束字符。但由于我在 Mac 中进行编辑,并且使用 vim 检查了几次,所以我很确定本地计算机中的启动脚本没有该字符。但是当在容器内用 vim 打开时,我可以看到^M到处。所以不知何故,该字符被添加到startup.sh当复制到图像中时,这很奇怪。这会阻止调用脚本。

解决方案是添加dos2unix filename在 Dockerfile 中的 ENTRYPOINT 之前。但请确保您的基础映像具有该实用程序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

未找到 Docker 映像入口点脚本 的相关文章

随机推荐