猿问

从 docker 文件传递​​ jvm 参数时出错

这是我的码头文件:


# Start with a base image containing Java runtime

FROM openjdk:8-jdk-alpine


# Add a volume pointing to /tmp

VOLUME /tmp


# Make port 8080 available to the world outside this container

EXPOSE 8080


# The application's jar file

COPY Server_Changes/glowroot  /tmp 

ARG JAR_FILE=target/websocket-demo-0.0.1-SNAPSHOT.jar

ARG OK=/tmp/glowroot.jar


# Add the application's jar to the container

ADD ${JAR_FILE} websocket-demo.jar


# Run the jar file 

ENTRYPOINT ["java", " -javaagent:/glowroot.jar" , "- Dglowroot.agent.id=Docker "," -jar /websocket-demo.jar"]

构建映像时出现以下错误:


无法找到或加载主类-javaagent:.glowroot.jar


有人可以解释为什么吗?


Helenr
浏览 115回答 1
1回答

慕莱坞森

当您在 、 和 命令中使用类似 JSON 的语法时RUN,ENTRYPOINT引号CMD内的空格很重要。特别是,当你说ENTRYPOINT ["java", " -javaagent:/glowroot.jar" , ...]#                    ^空间是选项的一部分;并且由于该选项不以 a 开头-,Java 将其解释为类名。这基本上适用于您的所有选择。在最后一个选项中,-jar类名是两个单独的选项,需要在两个单独的“单词”中。(考虑将其更改ENTRYPOINT为 aCMD以使图像更易于调试,并删除VOLUME声明;它只会导致意外的奇怪副作用。)CMD ["java", "-javaagent:/glowroot.jar",     "-Dglowroot.agent.id=Docker",     "-jar", "/websocket-demo.jar"]
随时随地看视频慕课网APP

相关分类

Java
我要回答