Docker:通过CLI使用--password是不安全的。使用--password stdin
在持续集成(CI)过程中登录到注册表时,我收到以下警告: 我是否应该将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
--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”@Thomascommand
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)