如何在基于 Docker 映像的 java:8-jdk-alpine 中使 curl 可用并保持映像干净?

新手上路,请多包涵

我们有运行 curl 命令以获取某些结果的 java 代码。

我们已经建立了一个jar文件并且jar文件执行得很好

现在,当我们尝试对 java 程序进行 docker 化(使用 jar)并在 docker 中运行应用程序时,我们会收到以下错误:

 errorjava.io.IOException: Cannot run program "curl": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at com.ps.api.common.CoreAPI_Spec.executeCoreAPI(CoreAPI_Spec.java:295)
    at com.ps.api.common.CoreAPI_Spec.getAccessTokens(CoreAPI_Spec.java:319)

使用的 Dockerfile:

 FROM ubuntu:16.04
MAINTAINER niro;

# Install prerequisites
RUN apt-get update && apt-get install -y \
curl

FROM java:8-jdk-alpine
# Set the working directory to /app
WORKDIR /Users/******/Desktop/CoreAPI_Jar

# Copy the current directory contents into the container at /app
ADD *******_Automation-0.0.1-SNAPSHOT-jar-with-dependencies.jar ******_Automation-0.0.1-SNAPSHOT-jar-with-dependencies.jar

# Run app.py when the container launches
CMD ["java", "-jar", "******-0.0.1-SNAPSHOT-jar-with-dependencies.jar"]

原文由 user3356164 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.6k
1 个回答

您使用的 Java 基础映像是 Alpine Linux one,还需要从那里下载 curl 包。这是我用于生产部署的 Dockerfile。

 FROM openjdk:8-jre-alpine

RUN apk add --update \
    curl \
    && rm -rf /var/cache/apk/*


更新 05/2019

从 Alpine Linux 3.3 开始,存在一个新的 --no-cache 选项 apk 。它允许用户安装带有索引的包,该索引可以即时更新和使用,而不是在本地缓存:

 FROM openjdk:8-jre-alpine

RUN apk --no-cache add curl

这避免了需要使用 --update 并在完成安装包时删除 /var/cache/apk/*

参考 - https://github.com/gliderlabs/docker-alpine/blob/master/docs/usage.md 并感谢@Daniel 的评论。

原文由 Imran 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题