我有一个Dockerfile喜欢的:
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"]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时docker run,我docker: Error response from daemon: Container command '/startup.sh' not found or does not exist..得到了 shell脚本有执行权限。
我用同样的方式运行我的其他应用程序,它们都工作正常。我在 Mac 上编写了这些文件,并尝试在 Linux 机器上运行该容器。
事实证明,是^MDOS 风格的行结束字符导致了该问题。但由于我在 Mac 中进行编辑,并且使用 vim 检查了几次,所以我很确定本地计算机中的启动脚本没有该字符。但是当用 vim 打开容器内时,我可以看到^M到处都是。startup.sh因此,当复制到图像中时,该字符会以某种方式被添加到其中,这很奇怪。这会阻止调用脚本。
dos2unix filename解决办法是在Dockerfile中的ENTRYPOINT前添加。但请确保您的基础映像具有该实用程序。
| 归档时间: |
|
| 查看次数: |
3891 次 |
| 最近记录: |