Dockerfile 中 `tee >/dev/null` 的用途?

问题描述 投票:0回答:2

Dockerfile 行中

tee
的用途是什么,例如:

RUN curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null

我熟悉

... | sudo tee file >/dev/null
形式的构造,但由于整个过程都是作为 root 运行的,所以这里不需要
sudo
,而且在
sudo
之前确实没有
tee
。它也不会将输出复制到 stdout,因为 stdout 被转储到
/dev/null

那么为什么不这样做呢:

RUN curl ... | gpg --dearmor > /etc/apt/keyrings/yarn.gpg

注意:我注意到,在那个特定的 Dockerfile 中,

tee
仅在从
gpg --dearmor
进行管道传输后使用。其他文件直接写成
... > file
gpg --dearmor
可能与为什么需要
tee
有关吗?

dockerfile tee
2个回答
1
投票

如果我理解正确的话,https://dl.yarnpkg.com/debian/pubkey.gpg已被删除并保存到/etc/apt/keyrings/yarn.gpg?

正如你所说,

.... | gpg --dearmor > /etc/apt/keyrings/yarn.gpg
也应该有效。很可能有人复制了您所知道的
... | sudo tee file >/dev/null
形式并删除了 sudo,因为他们认为它是不必要的,但没有多加考虑,也没有意识到 T 恤也是不必要的。

类似:

好的,我需要这个

*复制粘贴*

但是如果没有 sudo,它已经以 root 身份运行了

*删除 sudo*

我认为你不需要想太多。


0
投票

还值得注意的是,即使你需要 sudo,也可能没有必要使用 tee,因为 gpg 有一个

--output file
/
-o file
选项。

curl "$url" | gpg --dearmor | sudo tee "$file" >/dev/null

curl "$url" | sudo gpg -o "$file" --dearmor >/dev/null

会生成相同的文件。

© www.soinside.com 2019 - 2024. All rights reserved.