【问题标题】:Configure Hazelcast via external yml-file通过外部 yml 文件配置 Hazelcast
【发布时间】:2026-01-25 08:50:01
【问题描述】:

我在类路径中有一个正在运行的 hzc-yml 配置 - 生成的 jar 文件在 docker 上下文中运行良好。现在我想从外部加载这个 yml 文件。我将此启动属性添加到我的 DOCKERFILE:

-Dhazelcast.config=`./hazelcast.yaml`

整个 DOCKERFILE 看起来像:

FROM openjdk:14
VOLUME /tmp
WORKDIR /service
RUN mkdir /service/logs
COPY jar/hazelcast.yaml hazelcast.yaml
COPY jar/log4j.properties log4j.properties
COPY jar/hzc-service.jar hzc-service.jar
ENTRYPOINT exec java \
-Dhazelcast.config=`./hazelcast.yaml` \
-Dhazelcast.logging.type=log4j \
-Dlog4j.configuration=file:./log4j.properties \
-Djava.security.egd=file:/dev/./urandom \
--add-modules java.se --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-opens java.base/java.lang=ALL-UNNAMED --add-opens java.base/java.nio=ALL-UNNAMED --add-opens java.base/sun.nio.ch=ALL-UNNAMED --add-opens java.management/sun.management=ALL-UNNAMED --add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED \
$JAVA_OPTS \
-jar hzc-service.jar

似乎服务想应用外部 yml 文件,但我总是收到此错误:

hzc 服务 | /bin/sh: ./hazelcast.yaml: 权限被拒绝

我对文件应用了“chmod 777”,但没有任何效果。

谢谢

【问题讨论】:

    标签: java dockerfile hazelcast


    【解决方案1】:

    这看起来不对:

     -Dhazelcast.config=`./hazelcast.yaml` 
    

    只需删除反引号并将文件名放在引号之间:

     -Dhazelcast.config='./hazelcast.yaml' 
    

    使用反引号字符,您在 bash 中打开一个子 shell,并尝试在其中运行 hazelcast.yaml(这当然没有意义)。

    【讨论】: