gpt4 book ai didi

checksum - 在 Dockerfile 中校验和下载的规范方法?

转载 作者:IT老高 更新时间:2023-10-28 12:46:19 24 4
gpt4 key购买 nike

我正在创建一个从源代码下载、构建、安装 node.js 的 Dockerfile。我想checksum在构建之前下载,如果校验和失败则停止或退出 Dockerfile:

# officially supported ubuntu
FROM ubuntu:12.04

# SETUP
RUN cd /tmp
RUN apt-get update -y
RUN apt-get install wget build-essential automake -y
RUN wget http://nodejs.org/dist/latest/node-v0.10.26.tar.gz
RUN wget http://nodejs.org/dist/latest/SHASUMS256.txt

# RUN checksum: exit on fail, continue on success
??? how ???

# INSTALL
RUN tar -xvf node-v0.10.26.tar.gz && cd node-v0.10.26
RUN ./configure && make && make install

# CLEANUP
apt-get autoremove --purge wget build-essential automake -y

Docker 社区是否已经确定了这样做的“最佳实践”方式?

最佳答案

如果任何 RUN 命令返回非零代码,则构建将失败。

FROM fedora
RUN false

在上面的 Dockerfile 中,我只是通过运行 false 进行快速测试。 false 是一个 linux 实用程序,它只设置一个非零返回码,便于测试。如您所见,当我构建该 Dockerfile 时,它​​会提示并失败。

$ docker build .
Uploading context 12.29 kB
Uploading context
Step 0 : FROM fedora
---> 58394af37342
Step 1 : RUN false
---> Running in a5b9a4b37e25
2014/04/22 09:41:19 The command [/bin/sh -c false] returned a non-zero code: 1

现在我们知道了这一点,如果我们在图像中有文件和校验和(您似乎通过 wget 拥有),我们可以测试它们是否匹配。下面是一个快速而肮脏的版本,我在其中生成一个文件并在验证它之前计算它的校验和。在您的示例中,您显然不会这样做,我这样做只是为了向您展示这是如何工作的。

FROM fedora

# Create the text file
RUN echo ThisIsATest > echo.txt

# Calculate the checksum
RUN sha1sum echo.txt > sha1sums.txt

# Validate the checksum (this should pass)
RUN sha1sum -c sha1sums.txt

# Alter the text
RUN echo ThisShouldFail > echo.txt

# Validate the checksum (this should now fail)
RUN sha1sum -c sha1sums.txt

如果我们运行这个...

$ docker build -no-cache .
Warning: '-no-cache' is deprecated, it will be removed soon. See usage.
Uploading context 12.8 kB
Uploading context
Step 0 : FROM fedora
---> 58394af37342
Step 1 : RUN echo ThisIsATest > echo.txt
---> Running in cd158d4e6d91
---> 4088b1b4945f
Step 2 : RUN sha1sum echo.txt > sha1sums.txt
---> Running in 5d028d901d94
---> c97b1d31a720
Step 3 : RUN sha1sum -c sha1sums.txt
---> Running in 44d119897164
echo.txt: OK
---> ca01d590cadd
Step 4 : RUN echo ThisShouldFail > echo.txt
---> Running in 87b575ac4052
---> 36bb5d8cf6d1
Step 5 : RUN sha1sum -c sha1sums.txt
---> Running in e20b7ac0c924
echo.txt: FAILED
WARNING: 1 computed checksum did NOT match
2014/04/22 10:29:07 The command [/bin/sh -c sha1sum -c sha1sums.txt] returned a non-zero code: 1

关于checksum - 在 Dockerfile 中校验和下载的规范方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23209944/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com