Как настроить umask в док-контейнере на базе Alpine

У меня есть приложение Java, которое работает в докере на основе урезанного дистрибутива alpine, я хочу, чтобы для 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

Приложение запускается, но в журналах контейнера докеров я вижу, что на стандартный вывод выводится следующее

/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

person Paul Taylor    schedule 16.04.2020    source источник
comment
Это странно, я использовал ваш скрипт для сборки набора инструментов Windows Docker и успешно собрал без проблем.   -  person    schedule 16.04.2020
comment
Он отлично строится, проблема возникает при запуске   -  person Paul Taylor    schedule 16.04.2020
comment
Он работал нормально, и я тоже могу получить доступ к домашней странице.   -  person    schedule 16.04.2020
comment
@Sam оказывается, у него были символы cntl winows, поэтому он работал у вас в Windows, но не у меня в Linux.   -  person Paul Taylor    schedule 21.04.2020


Ответы (2)


В вашем скрипте /opt/songkong/songkongremote.sh есть что-то похожее на новые строки, отличные от Linux (Windows?).

введите здесь описание изображения

Вы можете просмотреть его, запустив:

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

И по той же причине не работала строка #!/bin/sh, возможно, она тоже выглядела как #!/bin/sh^M.

person DannyB    schedule 16.04.2020
comment
Спасибо, это было действительно так. Я уже сталкивался с этим раньше, dev env is windows, использующий Jebrains Intellij Ide, и он не дает мне никаких указаний, когда он это делает, должен быть какой-то параметр, который мне нужно использовать. - person Paul Taylor; 16.04.2020

В вашем файле сценария есть символы возврата каретки:

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 или лучше пересоздать скрипт.

person Andrew    schedule 16.04.2020