Jar 文件不在 Dockerfile 中执行
Jar file is not executed in with Dockerfile
我正在构建我的应用程序的 docker 图像。当我 运行 我的 docker 图像时,我想 运行 jar 文件。但是,我收到此错误:
Could not find or load main class
Mainclass设置在jar文件的manifest文件中。如果我从终端 运行 我的 jar 文件或 bash 脚本它工作正常。所以这个错误只在 运行ning docker:
时出现
docker run -v my-volume:/workdir container-name
我的 Dockerfile 中是否缺少某些配置或 jar 文件应该是 copied/added?
这是我的 Dockerfile:
FROM java:8
ENV SCALA_VERSION 2.11.8
ENV SBT_VERSION 1.1.1
ENV SPARK_VERSION 2.2.0
ENV SPARK_DIST spark-$SPARK_VERSION-bin-hadoop2.6
ENV SPARK_ARCH $SPARK_DIST.tgz
WORKDIR /opt
# Install Scala
RUN \
cd /root && \
curl -o scala-$SCALA_VERSION.tgz http://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz && \
tar -xf scala-$SCALA_VERSION.tgz && \
rm scala-$SCALA_VERSION.tgz && \
echo >> /root/.bashrc && \
echo 'export PATH=~/scala-$SCALA_VERSION/bin:$PATH' >> /root/.bashrc
# Install SBT
RUN \
curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
dpkg -i sbt-$SBT_VERSION.deb && \
rm sbt-$SBT_VERSION.deb
# Install Spark
RUN \
cd /opt && \
curl -o $SPARK_ARCH http://d3kbcqa49mib13.cloudfront.net/$SPARK_ARCH && \
tar xvfz $SPARK_ARCH && \
rm $SPARK_ARCH && \
echo 'export PATH=$SPARK_DIST/bin:$PATH' >> /root/.bashrc
EXPOSE 9851 9852 4040 9092 9200 9300 5601 7474 7687 7473
VOLUME /workdir
CMD java -cp "target/scala-2.11/demo_consumer.jar" consumer.SparkConsumer
我认为这是因为您从 Docker 容器执行的命令不在正确的文件夹中。您可以尝试从工作目录执行命令:
docker run -v my-volume:/workdir -w /workdir container_name
如果还是不行,你可以检查一下容器里面的东西。使用 ls
:
docker run -v my-volume:/workdir -w /workdir container_name bash -c 'ls -lah'
或通过访问其 bash 会话:
docker run -v my-volume:/workdir -w /workdir container_name bash
p.s:如果 bash
不起作用,请尝试使用 sh
。
我正在构建我的应用程序的 docker 图像。当我 运行 我的 docker 图像时,我想 运行 jar 文件。但是,我收到此错误:
Could not find or load main class
Mainclass设置在jar文件的manifest文件中。如果我从终端 运行 我的 jar 文件或 bash 脚本它工作正常。所以这个错误只在 运行ning docker:
时出现docker run -v my-volume:/workdir container-name
我的 Dockerfile 中是否缺少某些配置或 jar 文件应该是 copied/added? 这是我的 Dockerfile:
FROM java:8
ENV SCALA_VERSION 2.11.8
ENV SBT_VERSION 1.1.1
ENV SPARK_VERSION 2.2.0
ENV SPARK_DIST spark-$SPARK_VERSION-bin-hadoop2.6
ENV SPARK_ARCH $SPARK_DIST.tgz
WORKDIR /opt
# Install Scala
RUN \
cd /root && \
curl -o scala-$SCALA_VERSION.tgz http://downloads.typesafe.com/scala/$SCALA_VERSION/scala-$SCALA_VERSION.tgz && \
tar -xf scala-$SCALA_VERSION.tgz && \
rm scala-$SCALA_VERSION.tgz && \
echo >> /root/.bashrc && \
echo 'export PATH=~/scala-$SCALA_VERSION/bin:$PATH' >> /root/.bashrc
# Install SBT
RUN \
curl -L -o sbt-$SBT_VERSION.deb https://dl.bintray.com/sbt/debian/sbt-$SBT_VERSION.deb && \
dpkg -i sbt-$SBT_VERSION.deb && \
rm sbt-$SBT_VERSION.deb
# Install Spark
RUN \
cd /opt && \
curl -o $SPARK_ARCH http://d3kbcqa49mib13.cloudfront.net/$SPARK_ARCH && \
tar xvfz $SPARK_ARCH && \
rm $SPARK_ARCH && \
echo 'export PATH=$SPARK_DIST/bin:$PATH' >> /root/.bashrc
EXPOSE 9851 9852 4040 9092 9200 9300 5601 7474 7687 7473
VOLUME /workdir
CMD java -cp "target/scala-2.11/demo_consumer.jar" consumer.SparkConsumer
我认为这是因为您从 Docker 容器执行的命令不在正确的文件夹中。您可以尝试从工作目录执行命令:
docker run -v my-volume:/workdir -w /workdir container_name
如果还是不行,你可以检查一下容器里面的东西。使用 ls
:
docker run -v my-volume:/workdir -w /workdir container_name bash -c 'ls -lah'
或通过访问其 bash 会话:
docker run -v my-volume:/workdir -w /workdir container_name bash
p.s:如果 bash
不起作用,请尝试使用 sh
。