You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker Compose中自定义axelor-config.properties启动异常问题

问题描述

我有一个基于tomcat:9.0.70-jdk17-temurin的Dockerfile,其中复制了依赖axelor-config.properties配置的Axelor war包,该配置文件路径为:
/usr/local/tomcat/webapps/nameofapp/WEB-INF/classes/axelor-config.properties

直接使用镜像内配置文件时应用可正常运行,但通过Docker Compose的volume映射(./configuration/axelor-config.properties:/usr/local/tomcat/webapps/nameofapp/WEB-INF/classes/axelor-config.properties)覆盖该文件后,应用无法启动。我希望通过覆盖配置文件避免每次修改配置都重新编译应用、构建镜像。经确认配置文件已成功覆盖(容器内可见添加的注释),但启动失败,以下是全新镜像执行docker compose up后的日志:

NOTE: Picked up JDK_JAVA_OPTIONS:  --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.io=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
26-Dec-2022 22:51:21.618 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name:   Apache Tomcat/9.0.70
26-Dec-2022 22:51:21.666 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built:          Dec 1 2022 14:05:47 UTC
26-Dec-2022 22:51:21.667 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version number: 9.0.70.0
26-Dec-2022 22:51:21.667 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name:               Linux
26-Dec-2022 22:51:21.667 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version:            5.15.0-56-generic
26-Dec-2022 22:51:21.667 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture:          amd64
26-Dec-2022 22:51:21.668 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home:             /opt/java/openjdk
26-Dec-2022 22:51:21.668 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version:           17.0.5+8
26-Dec-2022 22:51:21.668 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor:            Eclipse Adoptium
26-Dec-2022 22:51:21.668 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE:         /usr/local/tomcat
26-Dec-2022 22:51:21.668 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME:         /usr/local/tomcat
26-Dec-2022 22:51:21.681 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.lang=ALL-UNNAMED
26-Dec-2022 22:51:21.681 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.io=ALL-UNNAMED
26-Dec-2022 22:51:21.681 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util=ALL-UNNAMED
26-Dec-2022 22:51:21.682 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.base/java.util.concurrent=ALL-UNNAMED
26-Dec-2022 22:51:21.682 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: --add-opens=java.rmi/sun.rmi.transport=ALL-UNNAMED
26-Dec-2022 22:51:21.682 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties
26-Dec-2022 22:51:21.682 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
26-Dec-2022 22:51:21.682 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djdk.tls.ephemeralDHKeySize=2048
26-Dec-2022 22:51:21.682 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.protocol.handler.pkgs=org.apache.catalina.webresources
26-Dec-2022 22:51:21.683 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dorg.apache.catalina.security.SecurityListener.UMASK=0027
26-Dec-2022 22:51:21.683 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dignore.endorsed.dirs=
26-Dec-2022 22:51:21.683 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.base=/usr/local/tomcat
26-Dec-2022 22:51:21.683 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Dcatalina.home=/usr/local/tomcat
26-Dec-2022 22:51:21.683 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/usr/local/tomcat/temp
26-Dec-2022 22:51:21.688 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent Loaded Apache Tomcat Native library [1.2.35] using APR version [1.7.0].
26-Dec-2022 22:51:21.689 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR capabilities: IPv6 [true], sendfile [true], accept filters [false], random [true], UDS [true].
26-Dec-2022 22:51:21.689 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent APR/OpenSSL configuration: useAprConnector [false], useOpenSSL [true]
26-Dec-2022 22:51:21.699 INFO [main] org.apache.catalina.core.AprLifecycleListener.initializeSSL OpenSSL successfully initialized [OpenSSL 3.0.2 15 Mar 2022]
26-Dec-2022 22:51:22.409 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]
26-Dec-2022 22:51:22.484 INFO [main] org.apache.catalina.startup.Catalina.load Server initialization in [992] milliseconds
26-Dec-2022 22:51:22.578 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]
26-Dec-2022 22:51:22.578 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet engine: [Apache Tomcat/9.0.70]
26-Dec-2022 22:51:22.599 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/usr/local/tomcat/webapps/nameofapp.war]
26-Dec-2022 22:51:23.097 INFO [main] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/usr/local/tomcat/webapps/nameofapp.war] has finished in [498] ms
26-Dec-2022 22:51:23.099 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]
26-Dec-2022 22:51:23.106 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [622] milliseconds
可能的原因与解决方案

1. 文件权限不匹配

Docker挂载主机文件到容器时,文件权限可能与Tomcat运行用户(通常为tomcat)不兼容,导致应用无法读取配置。

  • 检查容器内文件权限:执行docker exec <容器ID> ls -l /usr/local/tomcat/webapps/nameofapp/WEB-INF/classes/axelor-config.properties
  • 修复方法:
    • 调整主机文件权限:chmod 644 ./configuration/axelor-config.properties
    • 构建镜像时确保tomcat用户对目标路径有读取权限:
      RUN chown -R tomcat:tomcat /usr/local/tomcat/webapps/nameofapp
      

2. WAR包解压时序问题

Tomcat启动时会自动解压WAR包,若挂载操作晚于解压,WAR包内的原配置文件会覆盖挂载的文件(即使后续挂载成功,应用已读取了原配置)。

  • 修复方法:在Dockerfile中提前解压WAR包,避免启动时自动覆盖:
    RUN mkdir -p /usr/local/tomcat/webapps/nameofapp && \
        unzip /usr/local/tomcat/webapps/nameofapp.war -d /usr/local/tomcat/webapps/nameofapp && \
        rm /usr/local/tomcat/webapps/nameofapp.war && \
        chown -R tomcat:tomcat /usr/local/tomcat/webapps/nameofapp
    

3. 配置文件编码/格式错误

主机文件编码(如Windows GBK)与容器内预期的UTF-8不匹配,会导致Axelor解析配置失败。

  • 检查主机文件编码:file ./configuration/axelor-config.properties
  • 转换为UTF-8:使用文本编辑器(如VS Code)将文件编码切换为UTF-8并保存。

4. Axelor配置加载优先级问题

Axelor可能优先读取内置配置或缓存配置,未加载挂载的外部文件。可通过JVM参数指定外部配置路径:

  • 修改Docker Compose的环境变量:
    services:
      axelor:
        # ... 其他配置 ...
        environment:
          - JAVA_OPTS=-Daxelor.config=/opt/axelor-config.properties
        volumes:
          - ./configuration/axelor-config.properties:/opt/axelor-config.properties
    

内容的提问来源于stack exchange,提问作者Pablo Arriola

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 13:45:28