如何在基于Alpine的Docker容器中配置umask

时间:2020-04-16 14:51:49

标签: docker alpine umask

我有一个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

2 个答案:

答案 0 :(得分:1)

您的/opt/songkong/songkongremote.sh脚本看起来像非Linux换行符(Windows?)。

enter image description here

您可以通过运行以下内容来查看它:

$ 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或更好地重新创建脚本。