Dockerfile在每行以交互方式运行时工作,但在使用docker build时失败

Dockerfile在每行以交互方式运行时工作,但在使用docker build时失败,build,checksum,docker,sha,Build,Checksum,Docker,Sha,我有一个简单的示例,可以下载node.js源tarball,对其进行校验、提取、构建和安装。校验和在交互式docker容器中手动运行时有效,但在构建docker文件时运行完全相同的命令时失败 作品: docker run-i-t ubuntu:12.04/bin/bash cd/tmp apt获取更新-y apt获取安装wget构建基本汽车制造商-y wget wget sha256sum-cshasum256.txt 2>&1 | grep-qs OK tar-xvf节点-v0.10.26.t

我有一个简单的示例,可以下载node.js源tarball,对其进行校验、提取、构建和安装。校验和在交互式docker容器中手动运行时有效,但在构建docker文件时运行完全相同的命令时失败

作品:

docker run-i-t ubuntu:12.04/bin/bash

cd/tmp

apt获取更新-y

apt获取安装wget构建基本汽车制造商-y

wget

wget

sha256sum-cshasum256.txt 2>&1 | grep-qs OK

tar-xvf节点-v0.10.26.tar.gz和cd节点-v0.10.26

./configure&&make&&make安装

不起作用:

sudo docker build-t=“我的docker\u节点\u图像\u 01”

错误是:

sudo docker build -t="my_docker_node_image_01" .                                        
Uploading context 7.168 kB
Uploading context 
Step 0 : FROM ubuntu:12.04
 ---> 9cd978db300e
Step 1 : RUN cd /tmp
 ---> Using cache
 ---> 0467ad75bbd6
Step 2 : RUN apt-get update -y
 ---> Using cache
 ---> d2933f250090
Step 3 : RUN apt-get install wget build-essential automake -y
 ---> Using cache
 ---> e8a71b28782a
Step 4 : RUN wget http://nodejs.org/dist/latest/node-v0.10.26.tar.gz
 ---> Using cache
 ---> bae7de7b46f7
Step 5 : RUN wget http://nodejs.org/dist/latest/SHASUMS256.txt
 ---> Using cache
 ---> 245f6b6ceb84
 ---> 77532c879864
Step 6 : RUN sha256sum -c SHASUM256.txt 2>&1|grep -qs OK
 ---> Running in 77765e80f55b
2014/04/22 22:27:32 The command [/bin/sh -c sha256sum -c SHASUM256.txt 2>&1|grep -qs OK] returned a non-zero code: 1
我尝试将
less SHASUMS256.txt
添加到Dockerfile,只是为了确认文件已成功下载且未损坏,确实如此,但仍然会出现错误


我不知道如何解决这个问题,因为通常我只是在一个交互式容器中手动运行所有步骤,看看哪里出了问题。非常感谢您的任何建议。

我想我已经解决了这个问题,这只是一个输入错误,至少当我在上面剪切并粘贴您的命令时!您可以下载
SHASUMS256.txt
,但需要对名为
SHASUM256.txt
的文件进行测试(缺少
S
)。因为您丢弃了输出并将其传输到grep,所以您没有看到该错误

$ sha256sum -c SHASUM256.txt 
sha256sum: SHASUM256.txt: No such file or directory

$ sha256sum -c SHASUM256.txt 2>&1|grep -qs OK
$ echo $?
1
执行
echo$?
会告诉您最后执行的命令的返回代码(在本例中为
1
)。通过更正该文件,它现在对我有效:

 $ sha256sum -c SHASUMS256.txt 2>&1|grep -qs OK
 $ echo $?
 0

你为什么要把结果告诉格雷普
sha256sum
可能会写入控制台,但如果文件正常,则应设置正确的退出代码。另外,您能否回显SHASUM256.txt中的和以及node.gz中计算出的和?谢谢,问题是SHASUMS256.txt中没有校验和的每一行都会被发送到stderr,导致非零退出代码,即使有一行校验和成功,构建也会失败。我认为可行的解决方案是将stderr与stdout合并,通过管道将其传输到grep,过滤校验和的单行(OK),并抑制除出口代码之外的所有输出。如果OK存在,则结果为0,否则结果为1。它在交互模式下工作,但不是非交互Dockerfile构建。试图找出原因。