Ошибка «Нет такого файла или каталога» при запуске образа Docker в OpenShift, но не при выполнении «запуска Docker» - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть приложение Spring, встроенное в образ Docker, с помощью следующей команды в dockerfile

CMD cd /opt/app/jar \
    && java -Dspring.config.location=file:/opt/app/config/ -Dspring.profiles.active=test -jar *.jar

При создании приложения в OpenShift с

oc new-app --name=test-app --docker-image=MyImage

и проверить журнал с oc logs <pod_name>, я вижу эту ошибку:

java.lang.IllegalStateException: Logback configuration error detected: 
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[LOGFILE] - Failed to create parent directories for [/opt/app/jar/../log/debug.log]
ERROR in ch.qos.logback.core.rolling.RollingFileAppender[LOGFILE] - openFile(/opt/app/jar/../log/debug.log,true) call failed. java.io.FileNotFoundException: /opt/app/jar/../log/debug.log (No such file or directory)

Однако, когда я запускаю образ напрямую с помощью docker run -it <image_ID> /bin/bash, а затем выполняю команду java -jar, описанную выше, он работает нормально.

Вот фрагмент из моего logback.xml файла:

<appender name="LOGFILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${user.dir}/../log/debug.log</file>
        <encoder>
            <pattern>${FILE_LOG_PATTERN}</pattern>
            <charset>utf8</charset>
        </encoder>
        <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
            <fileNamePattern>${user.dir}/../log/archived/debug.%d{yyyy-MM-dd}.%i.log</fileNamePattern>
            <maxFileSize>50MB</maxFileSize>
            <maxHistory>10</maxHistory>
        </rollingPolicy>
    </appender>

Не могли бы вы сообщить, что мне не хватает?

Версии, которые я использую:

*# oc version
oc v3.7.14
kubernetes v1.7.6+a08f5eeb62
features: Basic-Auth GSSAPI Kerberos SPNEGO

# docker version
Client:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-1.12.6-71.git3e8e77d.el7.x86_64
 Go version:      go1.8.3
 Git commit:      3e8e77d/1.12.6
 Built:           Wed Dec 13 12:18:58 2017
 OS/Arch:         linux/amd64

Server:
 Version:         1.12.6
 API version:     1.24
 Package version: docker-1.12.6-71.git3e8e77d.el7.x86_64
 Go version:      go1.8.3
 Git commit:      3e8e77d/1.12.6
 Built:           Wed Dec 13 12:18:58 2017
 OS/Arch:         linux/amd64*

Ответы [ 2 ]

0 голосов
/ 09 сентября 2018

Возможно ли, что это проблема с разрешениями?

Если что-то не изменилось ... для большей безопасности OpenShift по умолчанию запускает контейнеры, используя пользователя со случайным UID;этот пользователь является членом корневой группы.

Итак, в дополнение к команде @Rico, предложенной для добавления в Dockerfile, я бы добавил:

RUN mkdir -p /opt/app/log \
 && chown -R :root /opt/app/log \
 && chmod -R 0775 /opt/app/log

Этот блог В статье содержится дополнительная информация о запуске контейнеров Docker с пользователями без полномочий root или случайными идентификаторами пользователей.(Отказ от ответственности: я связан с этим веб-сайтом)

0 голосов
/ 07 сентября 2018

${user.dir}, вероятно, отличается при запуске oc и при запуске docker.

Я бы начал с проверки этого значения в обеих средах.

В случае oc его, очевидно, не существует в контейнерах, поэтому одним из обходных путей является создание контейнера из MyImage, у которого он есть.

...