Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在基于alpine的docker容器中配置umask_Docker_Alpine_Umask - Fatal编程技术网

如何在基于alpine的docker容器中配置umask

如何在基于alpine的docker容器中配置umask,docker,alpine,umask,Docker,Alpine,Umask,我有一个在docker中运行的Java应用程序,它基于精简的alpine发行版,我希望将umask设置为0000,以便所有用户都可以访问应用程序在配置的卷/音乐中创建的所有文件 Dockerfile所做的最后一件事是运行启动应用程序的脚本 CMD /opt/songkong/songkongremote.sh 此文件包含以下内容 umask 0000 java -XX:MaxRAMPercentage=60 \ -Dcom.mchange.v2.log.MLog

我有一个在docker中运行的Java应用程序,它基于精简的alpine发行版,我希望将umask设置为0000,以便所有用户都可以访问应用程序在配置的卷/音乐中创建的所有文件

Dockerfile所做的最后一件事是运行启动应用程序的脚本

CMD /opt/songkong/songkongremote.sh
此文件包含以下内容

   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
应用程序运行,但在docker容器日志中,我看到以下内容输出到stdout

/opt/songkong/songkongremote.sh: umask: line 1: illegal mode: 0000
表示umask命令不起作用,我不理解,因为这是umask的有效值。(我也尝试过umask 000,但失败了,出现了相同的错误)

我还尝试添加

#!/bin/sh
作为文件的第一行,但Docker抱怨它找不到/bin/sh

完整Dockerfile是:

FROM adoptopenjdk/openjdk11:alpine-jre

RUN apk --no-cache add \
      ca-certificates \
      curl \
      fontconfig \
      msttcorefonts-installer \
      tini \
 && update-ms-fonts \
 && fc-cache -f

RUN mkdir -p /opt \
 && curl http://www.jthink.net/songkong/downloads/build1114/songkong-linux-docker.tgz?val=121| tar -C /opt -xzf - \
&& find /opt/songkong -perm /u+x -type f -print0 | xargs -0 chmod a+x

EXPOSE 4567

ENTRYPOINT ["/sbin/tini"]

# Config, License, Logs, Reports and Internal Database
VOLUME /songkong

# Music folder should be mounted here
VOLUME /music

WORKDIR /opt/songkong

CMD /opt/songkong/songkongremote.sh

您的
/opt/songkong/songkongremote.sh
脚本具有类似于非linux新行(Windows?)的功能

您可以通过运行以下命令进行查看:

$ docker run --rm -it your-image-name vi /opt/songkong/songkongremote.sh

这和
#的原因是一样的/bin/sh
行不起作用,它可能看起来像
#/bin/sh^M

脚本文件中有回车字符:

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

您可以将
运行sed-i-e's/\r//g'/opt/songkong/songkongremote.sh
添加到Dockerfile,或者更好地重新创建脚本。

谢谢,确实是这样。我以前也犯过这样的错误,开发环境是windows使用Jebrains Intellij Ide,它没有给我任何指控,当它这样做的时候,一定是我需要使用的一些设置。奇怪的是,我用你的脚本在windows docker工具包上构建,并且成功构建,没有任何问题。构建很好,当它运行正常并且我可以访问主页时,问题就出现了too@Sam原来它有winows cntl chracters,所以这就是为什么在windows上适用于您,而在linux上不适用于我