Search code examples
dockeralpine-linuxumask

How do I configure umask in alpine based docker container


I have a Java application that runs in docker based on the cutdown alpine distribution, I want umask to be set to 0000 so that all files created by the application in the configured volume /music are accessible to all users.

The last thing the Dockerfile does is run a script that starts the application

CMD /opt/songkong/songkongremote.sh

This file contains the following

   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

The application runs, but in the docker container logs I see the following is output to stdout

/opt/songkong/songkongremote.sh: umask: line 1: illegal mode: 0000

indicating the umask command did not work, which I do not understand since that is a valid value for umask. (I have also tried umask 000 at that failed with same error)

I also tried adding

#!/bin/sh

as the first line to the file, but then Docker complained it could not find /bin/sh.

Full Dockerfile is:

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

Solution

  • Your /opt/songkong/songkongremote.sh script has what looks like non-linux newlines (Windows?).

    enter image description here

    You can view it by running:

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

    And it is the same reason the #!/bin/sh line did not work, it probably looked like #!/bin/sh^M as well.