如何在基于Docker image的java:8-jdk-alpine中使curl可用并保持图像清洁?

use*_*164 22 java docker docker-java

我们正在使用运行curl命令的java代码来获取一些结果.

我们已经构建了一个jar文件,jar文件执行得很好

现在,当我们尝试doker化java程序(使用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)
Run Code Online (Sandbox Code Playgroud)

使用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"]
Run Code Online (Sandbox Code Playgroud)

Imr*_*ran 56

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

FROM openjdk:8-jre-alpine

RUN apk add --update \
    curl \
    && rm -rf /var/cache/apk/*
Run Code Online (Sandbox Code Playgroud)

  • 最新版本的apk支持更简洁的语法:apk --no-cache add curl (3认同)

Mar*_*kus 6

您的示例dockerfile包含多个FROM语句。这是有效的,但正如文档所述,每个都FROM清除了先前说明中的状态。因此,第二次擦拭后,新安装的卷发将被擦拭FROM

  • 马库斯,你说的不对。使用docker 17.05进行了重大更改。请调整您的答案。[参考](https://docs.docker.com/develop/develop-images/multistage-build/) (2认同)
  • 当然,没问题,并且答案现在是正确的-因为已经消除了`curl`,所以将不可用。 (2认同)