我有这个包含maven和java的 Dockerfile ,并且我也需要在其上安装一些工具:
# Use an official Maven image as a parent image
FROM maven:3.8.7-openjdk-18
USER root
# install netcat with requirements for health-check-web-server
RUN apt-get update --allow-releaseinfo-change \
&& DEBIAN_FRONTEND=noninteractive \
&& apt-get install -y wget \
&& apt-get install -y gnupg2 \
&& apt-get install -y net-tools ncat \
&& apt-get clean
当我使用以下命令构建图像时docker build -t inegration-test .
:
我收到此错误:
Dockerfile:7
--------------------
6 | # install netcat with requirements for health-check-web-server
7 | >>> RUN apt-get update --allow-releaseinfo-change \
8 | >>> && DEBIAN_FRONTEND=noninteractive \
9 | >>> && apt-get install -y wget \
10 | >>> && apt-get install -y gnupg2 \
11 | >>> && apt-get install -y net-tools ncat \
12 | >>> && apt-get clean
13 |
--------------------
ERROR: failed to solve: process "/bin/sh -c apt-get update --allow-releaseinfo-change && DEBIAN_FRONTEND=noninteractive && apt-get install -y wget && apt-get install -y gnupg2 && apt-get install -y net-tools ncat && apt-get clean" did not complete successfully: exit code: 127
我已尝试过:
我尝试让 Docker 容器保持活动状态,并查看是否有任何apt-get
,dnf
或apk
,但这些都在此容器中不可用:
更新:
显然maven:3.8.7-openjdk-18
是基于的oraclelinux:8-slim
,我试图将 Dockerfile 更改为以下内容,但没有帮助:
# Use an official Maven image as a parent image
FROM maven:3.8.7-openjdk-18
RUN dnf update -y && \
dnf install -y curl iputils && \
dnf clean all
maven:3.8.7-openjdk-18
显然是基于oracle-linux:8-slim
(参见https://hub.docker.com/layers/library/maven/3.8.7-openjdk-18/images/sha256-1936d70bb3415a0d7e822ed484cdb4974593b195091c145b52ba7775003dc3f0?context=explore)Oracle-linux 使用 DNF(
microdnf
其“精简”版本)作为包管理器,而不是 APT。因此,您可能可以将命令更改为 microdnf 命令。或者,如果您想使用基于 debian 的发行版(使用 APT),则可以使用
maven:3.8.7-openjdk-18-slim
(参见https://hub.docker.com/layers/library/maven/3.8.7-openjdk-18-slim/images/sha256-6e08ab80ed557294e30c9555c923e7620a8125b4f207996d961535789088339b?context=exploreeclipse-temurin
)或基于 ubuntu 的构建之一。我查看了图像的图像历史记录,发现那里使用命令
/usr/bin/microdfn
来安装包。然后,我尝试了命令
/usr/bin/microdnf install apt-get
,它确实做了一些事情,直到磁盘满了.....