【问题标题】:Docker: problem with run a file jar in dockerDocker:在 docker 中运行文件 jar 的问题
【发布时间】:2020-06-11 07:59:30
【问题描述】:

我是社区的新手,我是 docker 世界的新手。我必须通过 docker 虚拟化 leshan 服务器,并且必须使用 leshan 提供的选项“--redis”来执行此操作。所以我决定从 docker hub 获取一个 dockerfile 并修改最后一个“CMD”操作添加选项“--redis”。图像的构建是成功的,但是当我尝试在容器中运行图像时,错误是“无效或损坏的 jarfile”。这个问题在没有选项“--redis”的情况下也会出现(没有修改dockerfile)。奇怪的是,如果我从 dockerhub 中提取图像并通过相同的 dockerfile 运行服务器构建,它就可以工作!

这是 docker 文件:

FROM linarotechnologies/alpine:edge

RUN apk add --no-cache openjdk8-jre-base ca-certificates shadow curl
runit

RUN mkdir -p /opt/leshan-server-demo && \
    curl -o /opt/leshan-server-demo/leshan-server-demo.jar \
    https://hudson.eclipse.org/leshan/job/leshan/lastSuccessfulBuild/artifact/leshan-server-demo.jar
RUN useradd -r -d /opt/leshan-server-demo -s /sbin/nologin -U leshan

CMD cd /tmp && chpst -u leshan java -jar /opt/leshan-server-demo/leshan-server-demo.jar $LESHAN_ARGS

这是构建:

Sending build context to Docker daemon  7.294MB
Step 1/5 : FROM linarotechnologies/alpine:edge
 ---> 7463224280b0
Step 2/5 : RUN apk add --no-cache openjdk8-jre-base ca-certificates shadow curl runit
 ---> Using cache
 ---> ebe6e6280cdf
Step 3/5 : RUN mkdir -p /opt/leshan-server-demo &&     curl -o /opt/leshan-server-demo/leshan-server-demo.jar         https://hudson.eclipse.org/leshan/job/leshan/lastSuccessfulBuild/artifact/leshan-server-demo.jar
 ---> Using cache
 ---> 52b61160e8c5
Step 4/5 : RUN useradd -r -d /opt/leshan-server-demo -s /sbin/nologin -U leshan
 ---> Using cache
 ---> 53419af60e36
Step 5/5 : CMD cd /tmp && chpst -u leshan java -jar /opt/leshan-server-demo/leshan-server-demo.jar $LESHAN_ARGS#
 ---> Running in 52cb5fc95ffb
Removing intermediate container 52cb5fc95ffb
 ---> 68acab7c306e
Successfully built 68acab7c306e
Successfully tagged leshan-server:latest

这是我运行时的错误:

sudo docker run --rm -ti --name leshan-server leshan-server Error: Invalid or corrupt jarfile /opt/leshan-server-demo/leshan-server-demo.jar

有什么想法吗?谢谢你的帮助!

【问题讨论】:

  • 您可以尝试清理构建缓存,然后再次构建映像。如果你曾经得到一个无效的 jar,你仍然会缓存它。
  • 我试过了,但它不起作用。 :(
  • 是否有可能错误是正确的,而您只是有一个损坏的 JAR 文件?该 JAR 文件在其他设置中是否正常工作? stackoverflow.com/questions/7559072/corrupt-jar-file

标签: linux docker dockerfile containers leshan


【解决方案1】:
https://hudson.eclipse.org/leshan/job/leshan/lastSuccessfulBuild/artifact/leshan-server-demo.jar

这个 url 有 302 重定向。你必须使用 curl 的 -L 参数来跟随链接。

【讨论】:

  • 我添加了 -L 参数,但是当我运行图像时显示此错误:'线程“main”中的异常 java.lang.ExceptionInInitializerError'
【解决方案2】:
~# curl -o test.jar https://hudson.eclipse.org/leshan/job/leshan/lastSuccessfulBuild/artifact/leshan-server-demo.jar

~# cat leshan-server-demo.jar
<html>
<head><title>302 Found</title></head>
<body>
<center><h1>302 Found</h1></center>
<hr><center>nginx</center>
</body>
</html>

curl 正在下载 html 重定向页面。

您可以使用-L 选项告诉 curl 跟随重定向。

/opt/leshan-server-demo # curl -L -o test.jar https://hudson.eclipse.org/leshan/job/leshan/lastSuccessfulBuild/artifact/leshan-server-demo.
jar
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   138  100   138    0     0    316      0 --:--:-- --:--:-- --:--:--   315
100 7618k  100 7618k    0     0   622k      0  0:00:12  0:00:12 --:--:--  481k
/opt/leshan-server-demo #

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 1970-01-01
    • 2022-10-15
    • 2017-01-07
    • 2017-10-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-23
    • 1970-01-01
    相关资源
    最近更新 更多