Docker:通过CLI使用--password是不安全的.使用--password-stdin

Dim*_*iwa 27 continuous-integration docker dockerfile

在CI过程中登录时出现此错误:

WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Run Code Online (Sandbox Code Playgroud)

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

Nic*_*lay 50

根据docker文档:

要以非交互方式运行docker login命令,可以设置 --password-stdin标志以通过STDIN提供密码.使用STDIN可防止密码在shell的历史记录或日志文件中结束.

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

$ cat ~/my_password.txt | docker login --username foo --password-stdin
Run Code Online (Sandbox Code Playgroud)

要么

$ docker login --username foo --password-stdin < ~/my_password
Run Code Online (Sandbox Code Playgroud)

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

$ echo "$MY_PASSWORD" | docker login --username foo --password-stdin
Run Code Online (Sandbox Code Playgroud)

  • echo 避免了警告消息,但没有避免 docker 试图警告您的安全问题。您仍然可以在进程列表和潜在的 bash 历史记录中找到可用的密码。 (7认同)
  • 如果 MY_USERNAME 和 MY_PASSWORD 是环境变量,那么这不会在您的历史记录中留下痕迹:grep "^MY_PASSWORD=" | 切-d=-f2| docker登录-u“$MY_USERNAME”--密码-stdin` (5认同)
  • 非常感谢你的例子。现在另一个问题是,为什么 `--password` 会出现在 shell 历史记录或日志文件中?我们使用 CI 进程来发布我们的 docker 映像,因此没有历史记录,并且在执行命令后我在日志中看不到任何内容。 (3认同)
  • @Thomas `command &lt; FILENAME` 表达式意味着“接受来自文件的输入”。您不能将其用作变量。 (2认同)

Ste*_*ath 5

echo在基于Windows的系统上(或在基于vs2017-win2016的Azure Pipelines任务中运行时),相同的命令也会输出额外的换行符

要使用的解决方法set /p,另请参阅问题和答案

完整的命令将类似于:
echo | set /p="my_password" | docker login --username foo --password-stdin