Dockerfile 中的 Docker 镜像包补丁

时间:2021-07-20 19:00:35

标签: docker kubernetes dockerfile patch

我有下面的 docker 镜像,我需要将补丁更新为 curl 包,在下面的 Docker 镜像中,在第 3 行我已经在做更新,但它显示在漏洞报告中。

我在 Dockerfile 末尾添加了 RUN yum -y update curl,然后它就没有出现在漏洞报告中。

有任何修复吗?所有软件包必须安装最新版本,我不想明确提及

或者 Dockerfile 中的任何错误?

FROM    centos:7 AS base

FROM        base AS build


# Install all dependenticies
RUN yum -y update \
    && yum install -y openssl-devel bzip2-devel libffi-devel \
                      zlib-devel wget gcc make
# Below compile python from source


FROM        base

ENV         LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
COPY --from=build /usr/local/ /usr/local/

# Copy Code
COPY . /app/
WORKDIR /app

#Install code dependecies.
RUN /usr/local/bin/python -m pip install --upgrade pip \
    && pip install -r requirements.txt

# Why, I need this step, when I already update RUN in line 3?, If I won't perform I see in compliance report, any fix?
RUN yum -y update curl

# run Application
ENTRYPOINT ["python"]
CMD ["test.py"]

2 个答案:

答案 0 :(得分:1)

为了理解镜像的构成,您需要以不同的方式查看 Dockerfile:

  • 每一步(FROM 除外)都会创建一个新图像,并以上一步的结果为基础。
  • FROM 不使用上一步,而是使用明确指定的步骤。

现在,看看您的 Dockerfile,您似乎想知道为什么 RUN yum -y update curl 没有按预期工作。为了更容易理解,让我们向后追溯:

  • RUN yum -y update curl
  • RUN /usr/local/bin/python -m pip install --upgrade pip \ && pip install -r requirements.txt
  • WORKDIR /app
  • COPY . /app/
  • COPY --from=build /usr/local/ /usr/local/
  • ENV LD_LIBRARY_PATH=/usr/local/lib64:/usr/local/lib
  • FROM base -- 此时,上一步改为base
  • 的最后一步
  • FROM centos:7 AS base -- 这里,上一步改为centos:7

如您所见,前面的步骤中没有任何地方是 yum update -y curl

顺便说一句:输入这个,我想知道你的确切问题是什么,即这是否有效,或者你是否想知道为什么有必要。您知道 yum updateyum update curl 之间的区别吗?

答案 1 :(得分:0)

x.iloc[:,0] = x.iloc[:,0] + 100 和朋友有一个缓存系统,基于输入的文本。因此,如果命令 docker build 的文本没有改变,它将永远使用相同的缓存版本的输出(或直到缓存被删除)。尝试使用 yum -y update 运行构建,看看是否有帮助。