当前位置: 首页 > 知识库问答 >
问题:

docker运行错误:无法访问jarfile

吴修洁
2023-03-14

构建了Docker映像,但当我要运行它时,它显示以下错误:

Error: Unable to access jarfile rest-service-1.0.jar

我的操作系统是Ubuntu18.04.1LTS,我使用docker build-t doc-service和docker run doc-service。

这是我的DockerFile:

FROM ubuntu:16.04

MAINTAINER Frederico Apostolo <frederico.apostolo@blockfactory.com> (@fapostolo)

RUN apt-get update && apt-get -y upgrade

RUN apt-get install -y software-properties-common python-software-properties language-pack-en-base

RUN add-apt-repository ppa:webupd8team/java

RUN apt-get update && apt-get update --fix-missing && apt-get -y --allow-downgrades --allow-remove-essential --allow-change-held-packages upgrade \
    && echo oracle-java8-installer shared/accepted-oracle-license-v1-1 select true | /usr/bin/debconf-set-selections \
    && apt-get install -y --allow-downgrades --allow-remove-essential --allow-change-held-packages curl vim unzip wget oracle-java8-installer \
    && apt-get clean && rm -rf /var/cache/* /var/lib/apt/lists/*

ENV JAVA_HOME /usr/lib/jvm/java-8-oracle/

run java -version
run echo $JAVA_HOME

#use locate for debug
RUN apt-get update && apt-get install -y locate mlocate && updatedb

#LIBREOFFICE START
RUN apt-get update && apt-get update --fix-missing && apt-get install -y -q libreoffice \
    libreoffice-writer ure libreoffice-java-common libreoffice-core libreoffice-common \
    fonts-opensymbol hyphen-fr hyphen-de hyphen-en-us hyphen-it hyphen-ru fonts-dejavu \
    fonts-dejavu-core fonts-dejavu-extra fonts-noto fonts-dustin fonts-f500 fonts-fanwood \
    fonts-freefont-ttf fonts-liberation fonts-lmodern fonts-lyx fonts-sil-gentium \
    fonts-texgyre fonts-tlwg-purisa
#LIBREOFFICE END

#font configuration
COPY 00-odt-template-renderer-fontconfig.conf /etc/fonts/conf.d

RUN mkdir /document-service /document-service/fonts /document-service/module /document-service/logs

# local settings
RUN echo "127.0.0.1       http://www.arbs.local http://arbs.local www.arbs.local arbs.local" >> /etc/hosts
# && mkdir /logs/ && echo "dummy" >> /logs/errors.log

#EXPOSE 2115

COPY document-service-java_with_user_arg.sh /
RUN chmod +x /document-service-java_with_user_arg.sh

RUN apt-get update && apt-get -y --no-install-recommends install \
    ca-certificates \
    curl

RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4
RUN curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.4/gosu-$(dpkg --print-architecture)" \
    && curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.4/gosu-$(dpkg --print-architecture).asc" \
    && gpg --verify /usr/local/bin/gosu.asc \
    && rm /usr/local/bin/gosu.asc \
    && chmod +x /usr/local/bin/gosu

ENV LANG="en_US.UTF-8"

# In case someone loses the Dockerfile
# Needs to be in the end so it doesn't invalidate unaltered cache whenever the file is updated.
RUN rm -rf /etc/Dockerfile
ADD Dockerfile /etc/Dockerfile

ENTRYPOINT ["/document-service-java_with_user_arg.sh"]

this is document-service-java_with_user_arg.sh:

#!/bin/bash

USER_ID=${LOCAL_USER_ID:-9001}
USER_NAME=${LOCAL_USER_NAME:-jetty}

echo "Starting user: $USER_NAME with UID : $USER_ID"
useradd --shell /bin/bash --home-dir /document-service/dockerhome --non-unique --uid $USER_ID $USER_NAME

cd /document-service

/usr/local/bin/gosu $USER_NAME "$@" java -jar rest-service-1.0.jar

有人能帮我吗?

共有1个答案

蔡明贤
2023-03-14

根据这些注释,在构建映像时必须添加JAR,方法是在Dockerfile中定义:

COPY rest-service-1.0.jar /document-service/rest-service-1.0.jar

您还可以使用:

COPY rest-service-1.0.jar /rest-service-1.0.jar

,并删除入口点脚本中的cd/document-service,就像在ubuntu:16.04映像中一样,默认的工作目录是/。我的意见是,在脚本中设置工作目录更安全,所以您应该直接使用第一种解决方案。

最后,我建议您在DockerFile的末尾添加copy行,这样,如果构建了一个新的JAR,将不会从头重新构建映像,而是从现有层重新构建映像,从而加快构建时间。

 类似资料:
  • 我是docker的新手,正在尝试容器化一个简单的Spring Boot应用程序。docker文件如下所示。 谢谢!!

  • 我已经从JMeter插件管理器下载了“命令行图形绘制工具”和“JPGC-Standard Set”。 我从jmeter/lib/ext路径执行以下命令:命令1:Java-jar cmdrunner.jar--工具报告器--生成-csv C:\jtl\aggregate_report.csv--输入-jtl C:\jtl\file1.jtl--plugin-type AggregateReport-

  • 遥不可及!更改:false,msg:SSH错误:无法将数据发送到远程主机。确保可以通过ssh访问此主机,“不可访问”:true 主持人: ansible.cfg 我正在使用executeshell运行Jenkins的剧本`

  • 正在尝试将代码更新为Selenium 3。x、 在尝试运行测试时,我不断遇到一个错误: 同样的代码曾经在运行测试时工作,我真的不知道它在哪里或为什么会出现这样一个奇怪的错误。我似乎找不到任何人以前写过的任何东西,所以我希望stackoverflow社区可以帮助我解决这个问题。 以下是生成此错误的代码:

  • 我正在通过 Windows(10) 启动时的批处理文件启动我的应用程序。这是我在批处理文件中的内容 - 当windows启动时,我得到了 无法访问文件.jar 然而,问题是在这个错误消息之后,应用程序仍然在启动中,并且运行良好。正在访问jar但我仍然无法访问jar错误的原因是什么,如何避免它?找不到这个特定案例的任何答案。

  • 问题内容: 我已经尝试过将docker和jenkins一起使用,两者都安装在我的机器上(w10),并且我使用jankins运行docker镜像。但是,当我按照jenkins文档中的示例(来自doc的示例)时,它不起作用。不涉及时,不同的管道脚本可以工作,我还尝试从jenkins config接口添加。 管道脚本 错误堆栈 我在SO上发现了类似的问题\(相同但没有明确的解决方案) 问题答案: 您的工