【问题标题】:How do I configure umask in alpine based docker container如何在基于 alpine 的 docker 容器中配置 umask
【发布时间】:2020-07-29 20:54:45
【问题描述】:

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

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 容器日志中我看到以下输出到标准输出

/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

【问题讨论】:

  • 奇怪我用你的脚本在windows docker工具包上构建,构建成功没有任何问题
  • 构建正常,运行时出现问题
  • 运行良好,我也可以访问主页
  • @Sam 原来它有 winows cntl 字符,所以这就是为什么在 Windows 上对你有用,但在 linux 上对我没用

标签: docker alpine umask


【解决方案1】:

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

可以通过运行查看:

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

这与#!/bin/sh 行不起作用的原因相同,它可能看起来也像#!/bin/sh^M

【讨论】:

  • 谢谢,确实是这样。我以前犯过这个问题,开发环境是使用 Jebrains Intellij Ide 的 windows,它在执行此操作时没有给我任何指示,一定是我需要使用的一些设置。
【解决方案2】:

您的脚本文件中有回车符:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-02
    • 1970-01-01
    • 2021-02-19
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多