Dockerfile和安装 -> 软件包'openjdk-8-jre-headless'没有可安装的候选项

3
我正在尝试使用 DockerFile 安装 openjdk-8-jre,因为我要为我的组合器构建 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实例,则其运行的发行版与您的外部主机不同(这就是全部意义!),因此包名称等可能会有所不同。我们需要知道您成功测试的Ubuntu具体版本和失败的Ubuntu具体版本,才能得出确定性结论。 - Charles Duffy
我强烈怀疑你正在运行Docker的一部分原因是命令打印错误 - 要获得错误,命令需要真正运行为/bin/sh -c 'apt-get update && apt-get install -y openjdk-8-jre-headless ca-certificates-java'带引号,但即使它在实际运行时正确地表现为如果引号存在,Docker在打印错误消息时也会省略它们。 - Charles Duffy
你能分享一个生成错误的 Dockerfile 吗?(可以将其缩减为 [mre],删除所有不必要的命令以生成有问题的错误)。 - Charles Duffy
1
你正在使用什么作为构建基础?例如debian:buster(-slim)(以及基于它的镜像,例如python:3.7-slim),这些镜像中没有openjdk-8-jre-headlessapt仓库中(遇到了这个问题,升级到了openjdk-11)。参考在线软件包搜索。不,docker使用你所构建的操作系统的仓库。 - masseyb
我该如何在Dockerfile上检查安装包?java -version会报关于Java的错误。 - harakka
这个能帮到你吗:https://github.com/dineshbhagat/spring-boot-web-jpa/blob/c597462ebad14ab0181ec6051ac4deaca396cd77/Dockerfile#L8 - dkb
1个回答

0

看起来你正在使用 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。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接