无法从docker容器运行我的Java 8应用程序

无法从docker容器运行我的Java 8应用程序,java,docker,dockerfile,Java,Docker,Dockerfile,我可以使用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"

我可以使用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: 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文件实际上在路径中的/usr/local/bin目录中。容器中的类路径为空


我需要怎么做才能解决这个问题?

我使用了上面midelb提供的链接中的信息,最后得到了两个容器:一个用于SimpleProducer,另一个用于SimpleReceiver

以下是Docker文件中的一个:

FROM store/oracle/serverjre:8
MAINTAINER <james.depaul@maxar.com>

VOLUME /data

COPY build/libs/*.jar /usr/local/bin/
COPY /app/simple-queue-0.1-SNAPSHOT.jar /usr/local/bin/

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.SimpleConsumer
我现在这样称呼它:

docker run -d --rm -e SERVER1=server-b0.domain.com -e SERVER2=server-b1.domain.com -e USER=user -e PASSWORD=passwd mysystem/simple-client-consumer:1.0 

这回答了你的问题吗?我认为您试图向入口点传递一个额外的参数,但实际上您所做的是完全重写该命令。读一下CMD和ENTRYPOINT,当我有这样的,它的工作原理是:
entrypointjava-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=$Dusername=$USER-Dpassword=$PASSWORD.com.fusesource.activemq.exerces.simple.queue.simpleprodupleproducer
需要在运行时将类名作为输入提供给容器,但我无法让它在入口点的末尾添加任何内容。。。
docker build -t mysystem/simple-client-consumer:1.0
docker run -d --rm -e SERVER1=server-b0.domain.com -e SERVER2=server-b1.domain.com -e USER=user -e PASSWORD=passwd mysystem/simple-client-consumer:1.0