我有一个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(使用前将#替换为@)