Как настроить umask в альпийском docker контейнере - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть приложение Java, которое запускается в docker на основе урезанного альпийского дистрибутива. Я хочу, чтобы для umask было установлено значение 0000, чтобы все файлы, созданные приложением в настроенном томе / musi c, были доступны всем пользователям.

Последнее, что делает 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.

Полный файл 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

Ответы [ 2 ]

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

1 голос
/ 16 апреля 2020

Ваш скрипт /opt/songkong/songkongremote.sh имеет то, что выглядит как не linux переводы строки (Windows?).

enter image description here

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

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

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

...