使用Dockerfile

时间:2018-06-14 14:21:35

标签: scala docker sbt executable-jar

我正在构建我的应用程序的docker镜像。我想在运行docker镜像时运行jar文件。但是,我收到了这个错误:

Could not find or load main class 

主类在jar文件的清单文件中设置。如果我从终端或bash脚本运行我的jar文件,它工作正常。因此,只有在运行docker时才会出现此错误:

docker run -v my-volume:/workdir container-name

我的Dockerfile或jar文件中是否缺少某些配置应该被复制/添加? 这是我的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

1 个答案:

答案 0 :(得分:1)

我相信这是因为您从Docker容器执行的命令不在右侧文件夹中。您可以尝试执行workdir中的命令:

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