如何在基于高山 docker 的容器中配置 umask
How do I configure umask in alpine based docker container
我有一个 Java 应用程序 运行 在 docker 中基于 cutdown alpine 发行版,我希望将 umask 设置为 0000 以便应用程序创建的所有文件在配置的音量 /music 中,所有用户都可以访问。
Docker文件做的最后一件事是运行启动应用程序的脚本
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
应用程序 运行s,但在 docker 容器日志中我看到以下内容输出到标准输出
/opt/songkong/songkongremote.sh: umask: line 1: illegal mode: 0000
表示 umask 命令不起作用,我不明白这是 umask 的有效值。 (我也尝试过 umask 000 失败并出现同样的错误)
我也试过添加
#!/bin/sh
作为文件的第一行,但随后 Docker 抱怨找不到 /bin/sh.
完整的Docker文件是:
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
。
您的脚本文件中有回车 return 个字符:
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 或更好地重新创建脚本。
我有一个 Java 应用程序 运行 在 docker 中基于 cutdown alpine 发行版,我希望将 umask 设置为 0000 以便应用程序创建的所有文件在配置的音量 /music 中,所有用户都可以访问。
Docker文件做的最后一件事是运行启动应用程序的脚本
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
应用程序 运行s,但在 docker 容器日志中我看到以下内容输出到标准输出
/opt/songkong/songkongremote.sh: umask: line 1: illegal mode: 0000
表示 umask 命令不起作用,我不明白这是 umask 的有效值。 (我也尝试过 umask 000 失败并出现同样的错误)
我也试过添加
#!/bin/sh
作为文件的第一行,但随后 Docker 抱怨找不到 /bin/sh.
完整的Docker文件是:
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
。
您的脚本文件中有回车 return 个字符:
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 或更好地重新创建脚本。