【发布时间】:2020-01-24 00:13:26
【问题描述】:
我可以在 bash shell 中使用这个命令正确启动这个 Java 8 应用程序:
java -cp "simple-queue-0.1-SNAPSHOT.jar:jms-1.1.jar:commons-logging-1.2.jar:activemq-all-5.13.3.jar"
-Dserver1="my1.domain.com"
-Dserver2="my2.domain.com"
-Dusername="user"
-Dpassword="passwd"
com.fusesource.activemq.exercises.simple.queue.SimpleProducer
我想将这个应用程序容器化,所以这是我的 Dockerfile:
FROM store/oracle/serverjre:8
MAINTAINER <me@myco.com>
EXPOSE 4567
VOLUME /data
COPY build/libs/*.jar /usr/local/bin/
COPY /app/simple-queue-0.1-SNAPSHOT.jar /usr/local/bin/
CMD ["java", "-cp", "/usr/local/bin/simple-queue-0.1-SNAPSHOT.jar:/usr/local/bin/jms-1.1.jar:/usr/local/bin/commons-logging-1.2.jar:/usr/local/bin/activemq-all-5.13.3.jar", "-Dserver1=$SERVER1", -Dserver2="$SERVER2", -Dusername="$USER", -Dpassword="$PASSWORD"]
我这样启动我的容器:
docker run -it --rm -e SERVER1=my1.domain.com -e SERVER2=my2.domain.com -e USER=user -e PASSWORD=passwd ecosystem/simple-queue-client:1.1 com.fusesource.activemq.exercises.simple.queue.SimpleProducer
我收到此错误消息:
docker: Error response from daemon: OCI runtime create failed: container_linux.go:346: starting container process caused "exec: \"com.fusesource.activemq.exercises.simple.queue.SimpleProducer\": executable file not found in $PATH": unknown.
当我进入该容器时,我可以看到我的 jar 文件实际上位于 PATH 中的 /usr/local/bin 目录中。容器中的CLASSPATH是空的……
我需要做什么来解决这个问题?
【问题讨论】:
-
这能回答你的问题吗? docker: executable file not found in $PATH
-
我认为您尝试将一个附加参数传递给您的入口点,但您实际上所做的是完全覆盖该命令。阅读 CMD 与 ENTRYPOINT。
-
当我这样拥有它时,它可以工作:
ENTRYPOINT java -classpath /usr/local/bin/simple-queue-0.1-SNAPSHOT.jar:/usr/local/bin/jms-1.1.jar:/usr/local/bin/commons-logging-1.2.jar:/usr/local/bin/activemq-all-5.13.3.jar -Dserver1=$SERVER1 -Dserver2=$SERVER2 -Dusername=$USER -Dpassword=$PASSWORD com.fusesource.activemq.exercises.simple.queue.SimpleProducer但我需要在运行时将类名作为输入提供给容器,我无法让它附加任何东西该入口点的结尾......
标签: java docker dockerfile