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

Docker:通过CLI使用--password是不安全的。使用--password stdin,docker,continuous-integration,dockerfile,Docker,Continuous Integration,Dockerfile,在持续集成(CI)过程中登录到注册表时,我收到以下警告: 我是否应该将--password替换为--password stdin?根据文档: 要以非交互方式运行docker login命令,可以设置 --密码stdin通过stdin提供密码的标志。使用 STDIN防止密码出现在shell的历史记录中,或者 日志文件 以下示例从文件中读取密码,并使用STDIN将其传递给docker login命令: $ cat ~/my_password.txt | docker login --username

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

我是否应该将
--password
替换为
--password stdin

根据文档:

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

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

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


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

使用
set/p
的解决方法,另请参见

完整命令如下:

echo | set/p=“my_password”| docker登录--用户名foo--密码stdin

这是一个使用AWS时经常收到的警告。如果是这种情况,问题的另一个解决方案可能是不显式运行该命令,以便将其存储在历史记录中。为此,可以使用(aws2)


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

非常感谢您提供的示例。现在还有一个问题,为什么
--password
会出现在shell历史记录或日志文件中?我们使用CI进程来发布docker映像,因此没有历史记录,并且在执行该命令后,我在日志中看不到任何内容。这是假设您自己键入的,而不是CI环境。为什么这不起作用?(没有,但我不明白为什么,因为我对bash不是很在行):docker登录——用户名foo——密码stdin<“$MY_password”@Thomas
command
expression的意思是
接受文件输入
。您不能将其用于变量。回显可以避免警告消息,但不会避免docker试图警告您的安全问题。在进程列表和bash历史记录中,您仍然可以使用密码。请注意用户名与您的电子邮件地址不同。在Docker Hub上检查您的个人资料,并提供其中指定的用户名。
$ docker login --username foo --password-stdin < ~/my_password
$ echo "$MY_PASSWORD" | docker login --username foo --password-stdin
eval $(aws2 ecr get-login --no-include-email)