【发布时间】:2018-12-31 12:42:19
【问题描述】:
当我在持续集成 (CI) 过程中登录注册表时收到以下警告:
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
我应该将--password 替换为--password-stdin 吗?
【问题讨论】:
标签: docker continuous-integration dockerfile
当我在持续集成 (CI) 过程中登录注册表时收到以下警告:
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
我应该将--password 替换为--password-stdin 吗?
【问题讨论】:
标签: docker continuous-integration dockerfile
根据docker 文档:
要以非交互方式运行 docker login 命令,您可以设置
--password-stdin标志通过 STDIN 提供密码。使用 STDIN 防止密码出现在 shell 的历史记录中,或者 日志文件。
以下示例从文件中读取密码,并使用 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
【讨论】:
--password 会出现在 shell 历史记录或日志文件中?我们使用 CI 过程来发布我们的 docker 映像,因此没有历史记录,执行命令后我在日志中看不到任何内容。
command < FILENAME 表示Accept input from a file。您不能将其用于变量。
在基于 Windows 的系统上(或在基于 vs2017-win2016 的 Azure Pipelines 任务中运行时)相同的 echo 命令也会输出额外的 换行符。
使用set /p 的解决方法,另请参阅question + answer。
完整的命令如下:echo | set /p="my_password" | docker login --username foo --password-stdin
【讨论】:
使用 powershell 的 Windows 10 解决方案:
使用记事本创建一个包含密码的单行文本文件。该文件被命名为“password1.txt”,以便下面的命令行运行。
将此文件保存在您在 powershell 中使用的文件夹中(...通常是 C:\Users\Your_Username )。
Get-Content password1.txt | docker login --username my_username --password-stdin
【讨论】:
在 github 操作中设置:
echo ${{ secrets.DOCKER_TOKEN }} | docker login --username ${{ secrets.DOCKER_USERNAME }} --password-stdin
【讨论】:
WARNING! Your password will be stored unencrypted in /home/runner/.docker/config.json.
这是使用 AWS 时经常遇到的警告。如果是这种情况,该问题的另一种解决方案可能是不显式运行命令,以便将其存储在历史记录中。为此,可以使用 (with aws2)
eval $(aws2 ecr get-login --no-include-email)
即使您仍然会看到警告,但包含密钥/密码的显式 docker 命令不会存储在 bash 历史记录中。如果不信,请尝试运行history 命令亲自查看。
【讨论】: