Docker: 通过 CLI 使用—— password 是不安全的

当我在持续集成(CI)过程中登录到我的注册中心时,我有以下警告:

WARNING! Using --password via the CLI is insecure. Use --password-stdin.

我应该用 --password-stdin代替 --password吗?

119251 次浏览

根据 码头的文件:

To run the docker login command non-interactively, you can set the 通过 STDIN 提供密码 STDIN prevents the password from ending up in the shell’s history, or 日志文件。

以下示例从文件读取密码,并使用 STDIN 将其传递给 docker login 命令:

$ cat ~/my_password.txt | docker login --username foo --password-stdin

或者

$ docker login --username foo --password-stdin < ~/my_password

下面的示例从变量读取密码,并使用 STDIN 将其传递给 docker login 命令:

$ echo "$MY_PASSWORD" | docker login --username foo --password-stdin

在基于 Windows 的系统上(或者在基于 vs2017-win2016的 Azure 管道任务中运行时) ,相同的 echo命令也会输出一个额外的 新线

A workaround for this to use set /p, see also 问题 + 答案.

完整的命令是这样的:
echo | set /p="my_password" | docker login --username foo --password-stdin

这是使用 AWS 时通常会得到的警告。如果是这种情况,那么问题的另一种解决方案可能不会显式运行该命令,以便将其存储在历史记录中。要做到这一点,可以使用(与 aws2)

eval $(aws2 ecr get-login --no-include-email)

即使您仍然会看到这个警告,但是包含密钥/密码的显式 docker 命令不会存储在 bash 历史记录中。如果不相信,请尝试运行 history命令自己查看。

Windows 10 solution using powershell:

使用记事本创建一行文本文件和密码。该文件被命名为“ password1.txt”,以便下面的命令行可以工作。
将此文件保存到您在 powershell 中使用的文件夹中(... 通常是 C: Users Your _ Username)。

Get-Content password1.txt | docker login --username my_username --password-stdin

参考: Redirecting standard input\output in Windows PowerShell

Setup in github actions:

echo $\{\{ secrets.DOCKER_TOKEN }} | docker login --username $\{\{ secrets.DOCKER_USERNAME }} --password-stdin

使用 Windows 批处理(如果不使用 PowerShell) :

type password.txt | docker login --username foo --password-stdin