自动docker登录bash脚本

25 unix linux bash docker

如何docker login在脚本中预先设置我的凭据?

我正在使用一个bash脚本,基本上自动完成设置我的自定义VM等的整个过程,但是当我需要在脚本中登录docker来拉取图像时,我收到以下错误:

用户名:FATA [0000]不适合设备的ioctl


我使用的命令如下:

( echo "xxx"; echo "yyy"; echo "zzz" ) | docker login docker.somesite.org
Run Code Online (Sandbox Code Playgroud)


这可能是在不使用和处理现有.dockercfg文件的情况下实现的,
非常感谢.

Nat*_*rot 48

Docker 18及以后

现在有一个官方记录的方法来做到这一点:

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

Docker 1.11到Docker 17

您可以在命令行上传递所有参数:

docker login --username=$DOCKER_USER --password=$DOCKER_PASS $DOCKER_HOST
Run Code Online (Sandbox Code Playgroud)

如果您没有指定DOCKER_HOST,您将获得主Docker仓库.如果省略任何参数,系统将提示您输入该参数.

年龄大于1.11

相同的路径正上方,只是你需要传递一个--email标志.实际上没有检查它的内容,所以一切都很好:

docker login --username=$DOCKER_USER --password=$DOCKER_PASS $DOCKER_HOST --email whale@docker.com
Run Code Online (Sandbox Code Playgroud)

  • 短符号可能更方便:`docker login -u $ DOCKER_USER -p $ DOCKER_PASS -m $ DOCKER_EMAIL $ DOCKER_HOST` (5认同)
  • 这是一个偏好的问题,但是当我编写一个脚本时,我更喜欢长期选项,因为它是自我记录的,并且没有简洁的优势.(与命令行相反,它可以保存我的手指并避免包裹.) (4认同)

noe*_*lin 8

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

$ echo $DOCKER_PASS | docker login -u$DOCKER_USER --password-stdin $DOCKER_HOST
Run Code Online (Sandbox Code Playgroud)


dom*_*ang 7

当您登录到您的私有注册表时,docker 会自动创建一个文件 $HOME/.docker/config.json 该文件具有 Credentials 信息,因此您可以在要登录注册表时保存该文件并复制到任何主机。

文件内容是这样的:

{
     "auths": {
                   "example.com": {
                                    "auth": "xxxxxxxxxxxxxxxxxxxxxxx"
                    }
            }
 }
Run Code Online (Sandbox Code Playgroud)

附加组件 如果您想在一台服务器上登录多个 docker 注册表,只需添加另一个身份验证信息。像这样:

{
     "auths": {
                   "example.com": {
                                    "auth": "xxxxxxxxxxxxxxxxxxxxxxx"
                    },
                    "example1.com":{
                                    "auth": "xxxxxxxxxxxxxxxxxxxxxxx"
                    }
            }
 }
Run Code Online (Sandbox Code Playgroud)

现在您可以从 example.com 和 example1.com 推送和拉取图像。