我们有运行 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 许可协议
您使用的 Java 基础映像是 Alpine Linux one,还需要从那里下载 curl 包。这是我用于生产部署的 Dockerfile。
更新 05/2019
从 Alpine Linux 3.3 开始,存在一个新的
--no-cache
选项apk
。它允许用户安装带有索引的包,该索引可以即时更新和使用,而不是在本地缓存:这避免了需要使用
--update
并在完成安装包时删除/var/cache/apk/*
。参考 - https://github.com/gliderlabs/docker-alpine/blob/master/docs/usage.md 并感谢@Daniel 的评论。