【问题标题】:Dockerfile & installation -> Package 'openjdk-8-jre-headless' has no installation candidateDockerfile & 安装 -> 包 'openjdk-8-jre-headless' 没有安装候选
【发布时间】:2019-08-21 14:21:03
【问题描述】:

我正在尝试安装 openjdk-8-jre vie DockerFile,因为我为我的作曲家构建了 docker 映像。但我遇到了这个错误信息。

错误信息:

Package openjdk-8-jre-headless is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

E: Package 'openjdk-8-jre-headless' has no installation candidate

这是来自 Dockerfile 的部分:

# Install openjdk and java cacerts
RUN apt-get update && apt-get install -y openjdk-8-jre-headless ca-certificates-java

如果我直接从控制台安装 java,在没有 RUN 的情况下使用完全相同的命令,包没有问题。但是当我尝试从 Dockerfile 安装它时,我遇到了错误。我知道 Docker 使用与运行 docker 的机器相同的存储库? Ubuntu 是 16.04 版。

或者我如何检查 Dockerfile 上的可用安装包? java -v 报错..

【问题讨论】:

  • “工作正常”在完全相同的机器上?请注意,如果这是一个 Docker 实例,它运行的发行版与您的外部主机不同(这就是重点!),所以包名称 &c。可以不同。我们会知道您成功测试的是哪个特定版本的 Ubuntu,以及失败的是哪个特定版本的 Ubuntu,以便能够得出结论。
  • (我强烈怀疑您正在运行 Docker 的部分原因是命令打印错误——为了得到您的错误,该命令需要真正以 /bin/sh -c 'apt-get update && apt-get install -y openjdk-8-jre-headless ca-certificates-java' 的形式运行并带有引号,但即使虽然它在实际运行时正确地表现得好像引号就在那里,但 Docker 在打印错误消息时将它们排除在外)。
  • ...你能分享一个生成错误的 Dockerfile 吗? (可以将其缩减为minimal reproducible example,并删除所有不是生成相关错误所必需的命令)。
  • 你在构建什么FROM?即debian:buster(-slim)(以及基于即python:3.7-slim的图像)在apt存储库中没有openjdk-8-jre-headless(撞墙,升级到openjdk-11)参考。 online package search。不,docker 使用您正在构建的操作系统的 repo FROM
  • 如何查看Dockerfile上的安装包? java -version 给出关于 java.. 的错误。

标签: java ubuntu docker-compose dockerfile


【解决方案1】:

似乎您正在使用FROM python:3.8 as base 并且正如@masseyb 在您的问题下的评论中提到的那样,它没有 openjdk-8jre-headless 包。

这可能会对你有所帮助。

FROM python:3.7-alpine as base
RUN apk update \
&& apk upgrade \
&& apk add --no-cache bash \
&& apk add --no-cache --virtual=build-dependencies unzip \
&& apk add --no-cache curl \
&& apk add --no-cache openjdk8-jre

RUN apk add --no-cache python3 \
&& python3 -m ensurepip \
&& pip3 install --upgrade pip setuptools \
&& rm -r /usr/lib/python*/ensurepip && \
if [ ! -e /usr/bin/pip ]; then ln -s pip3 /usr/bin/pip ; fi && \
if [[ ! -e /usr/bin/python ]]; then ln -sf /usr/bin/python3 /usr/bin/python; fi && \
rm -r /root/.cache

RUN pip install --trusted-host pypi.python.org flask

这个示例 Dockerfile 可以让你获得 Java python 和 flask

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-09
    • 2018-05-25
    • 1970-01-01
    • 2017-03-27
    • 2021-11-24
    • 2020-07-27
    • 2021-04-23
    • 2020-02-02
    相关资源
    最近更新 更多