Docker中使用SupervisorD运行带-javaagent参数的Java服务报错如何解决?
可行解决方案
1. 修复Dockerfile缺失agent包的问题
你当前的Dockerfile仅复制了业务jar包HelloWorld.jar,没有将executor.jar复制到容器内的对应路径,是触发报错的核心原因。修改后的Dockerfile如下:
FROM openjdk:11 USER root COPY ./HelloWorld.jar /usr/apps/HelloWorld.jar # 新增复制javaagent包的步骤,注意替换为你本地executor.jar的实际路径 COPY ./executor.jar /usr/apps/executor.jar CMD ["/usr/bin/supervisord","-n"]
2. 修正Supervisord配置的参数写法
Supervisord的command字段不需要给参数额外加引号,引号会被识别为参数内容导致解析异常,直接使用不带引号的参数即可。正确的配置如下:
[supervisord] nodaemon = true user = root loglevel = debug [program:helloworld] user = root directory = /usr/apps command = /usr/bin/env java -javaagent:/usr/apps/executor.jar -jar /usr/apps/HelloWorld.jar
3. 可选:验证文件有效性
如果修改后仍然报错,可以临时将program的command改为ls -l /usr/apps/,启动容器后查看日志,确认文件是否存在、权限是否正常。
内容的提问来源于stack exchange,提问作者user3663854
相关产品推荐
相关产品推荐

