我有下面的 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"]
答案 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 update
和 yum update curl
之间的区别吗?
答案 1 :(得分:0)
x.iloc[:,0] = x.iloc[:,0] + 100
和朋友有一个缓存系统,基于输入的文本。因此,如果命令 docker build
的文本没有改变,它将永远使用相同的缓存版本的输出(或直到缓存被删除)。尝试使用 yum -y update
运行构建,看看是否有帮助。