我有一个Java应用程序,它基于减少的Alpine发行版在docker中运行,我希望将umask设置为0000,以便该应用程序在配置的卷/ music中创建的所有文件可供所有用户访问。
Dockerfile做的最后一件事是运行一个脚本来启动应用程序
const reader = new FileReader();
const file = new File([imgUrl], { type: "image/png" });
console.log(file);
reader.addEventListener("load", function (e) {
console.log(e.currentTarget.result);
}, false);
const data = reader.readAsDataURL(file);
return data;
}
const img = "localhost:8080/start app abnner.png"; // my image path
getDataUrl(img);
此文件包含以下内容
CMD /opt/songkong/songkongremote.sh
应用程序运行,但是在docker容器日志中,我看到以下输出到stdout
umask 0000
java -XX:MaxRAMPercentage=60 \
-Dcom.mchange.v2.log.MLog=com.mchange.v2.log.jdk14logging.Jdk14MLog\
-Dorg.jboss.logging.provider=jdk \
-Djava.util.logging.config.class=com.jthink.songkong.logging.StandardLogging\ --add-opens java.base/java.lang=ALL-UNNAMED -jar lib/songkong-6.9.jar -r
指示 umask 命令不起作用,我不明白,因为这是umask的有效值。 (我也尝试过umask 000失败,并出现相同的错误)
我也尝试添加
/opt/songkong/songkongremote.sh: umask: line 1: illegal mode: 0000
作为文件的第一行,但是Docker抱怨找不到/ bin / sh。
完整的Dockerfile是:
#!/bin/sh
答案 0 :(得分:1)
您的/opt/songkong/songkongremote.sh
脚本看起来像非Linux换行符(Windows?)。
您可以通过运行以下内容来查看它:
$ docker run --rm -it your-image-name vi /opt/songkong/songkongremote.sh
与#!/bin/sh
行不起作用的原因相同,它也可能看起来像#!/bin/sh^M
。
答案 1 :(得分:1)
您的脚本文件中包含回车符:
umask 0000^M
java -XX:MaxRAMPercentage=60 -Dcom.mchange.v2.log.MLog=com.mchange.v2.log.jdk14logging.Jdk14MLog -Dorg.jboss.logging.provider=jdk -Djava.util.logging.config.class=com.jthink.songkong.logging.StandardLoggi
^M
您可以将RUN sed -i -e 's/\r//g' /opt/songkong/songkongremote.sh
添加到Dockerfile或更好地重新创建脚本。