我在dockerfile
中使用以下命令将Spring应用程序构建到Docker镜像中
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*
发布于 2018-09-08 22:26:08
有没有可能是权限问题?
除非具有更好的安全性,否则OpenShift默认情况下使用具有随机UID的用户运行容器;该用户是根组的成员。
因此,除了建议添加到Dockerfile的命令@Rico之外,我还将添加:
RUN mkdir -p /opt/app/log \
&& chown -R :root /opt/app/log \
&& chmod -R 0775 /opt/app/log
此blog article包含有关使用非根用户或随机用户ID运行Docker容器的更多信息。(免责声明:我与该网站有关联)
发布于 2018-09-07 04:05:57
当您运行oc
和运行docker
时,${user.dir}
可能有所不同。
我首先检查这两个环境中的值。
在oc
的情况下,它显然不存在于容器中,所以一种解决方法是从MyImage
创建一个包含它的容器。
https://stackoverflow.com/questions/52215073
复制相似问题