【问题标题】:Docker: Using --password via the CLI is insecure. Use --password-stdinDocker:通过 CLI 使用 --password 是不安全的。使用 --password-stdin
【发布时间】: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


    【解决方案1】:

    根据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 映像,因此没有历史记录,执行命令后我在日志中看不到任何内容。
    • 假设你是自己输入的,而不是 CI 环境。
    • 为什么这不起作用? (它没有,但我不明白为什么,因为我不太擅长 bash): docker login --username foo --password-stdin
    • @Thomas command &lt; FILENAME 表示Accept input from a file。您不能将其用于变量。
    • 回显避免了警告消息,但不是 docker 试图警告您的安全问题。您仍然可以在进程列表和可能的 bash 历史记录中使用密码。
    【解决方案2】:

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

    使用set /p 的解决方法,另请参阅question + answer

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

    【讨论】:

    • 请注意用户名与您的电子邮件地址不同。检查您在 Docker Hub 上的个人资料并提供在那里指定的用户名。
    【解决方案3】:

    使用 powershell 的 Windows 10 解决方案:

    使用记事本创建一个包含密码的单行文本文件。该文件被命名为“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

    【讨论】:

      【解决方案4】:

      在 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.
      • 最后在你的github操作中添加“docker logout”来删除config.json的密码
      【解决方案5】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-08-23
        • 2022-06-14
        • 1970-01-01
        • 2021-05-12
        • 2022-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多