自动docker登录bash脚本

时间:2015-06-22 00:12:27

标签: linux bash unix docker

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

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

  

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


我使用的命令如下:

( echo "xxx"; echo "yyy"; echo "zzz" ) | docker login docker.somesite.org


这是否可以在不使用和处理现有.dockercfg文件的情况下实现,以及如何实现 非常感谢。

5 个答案:

答案 0 :(得分:32)

Docker 18及更高版本

现在有officially-documented方法可以做到这一点:

cat ~/my_password.txt | docker login --username foo --password-stdin

Docker 1.11到Docker 17

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

docker login --username=$DOCKER_USER --password=$DOCKER_PASS $DOCKER_HOST

如果您没有指定DOCKER_HOST,那么您将获得主要的Docker回购。如果省略任何参数,系统会提示您输入该参数。

小于1.11

与上面相同的路径,除了您需要传递--email标志。实际上没有检查过它的内容,所以一切都很好:

docker login --username=$DOCKER_USER --password=$DOCKER_PASS $DOCKER_HOST --email whale@docker.com

答案 1 :(得分:7)

  

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

$ echo $DOCKER_PASS | docker login -u$DOCKER_USER --password-stdin $DOCKER_HOST

答案 2 :(得分:3)

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

文件内容如下:

{
     "auths": {
                   "example.com": {
                                    "auth": "xxxxxxxxxxxxxxxxxxxxxxx"
                    }
            }
 }

加载项如果要在一台服务器上登录多个docker注册表,只需添加另一个auth信息,如下所示:

{
     "auths": {
                   "example.com": {
                                    "auth": "xxxxxxxxxxxxxxxxxxxxxxx"
                    },
                    "example1.com":{
                                    "auth": "xxxxxxxxxxxxxxxxxxxxxxx"
                    }
            }
 }

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

答案 3 :(得分:0)

对于任何可能会偶然遇到这种情况的人,都可能会寻找一种针对Openshift环境的容器注册表(Docker)使用它的方法,您可以使用以下内容提供注册表URI以及使用Openshift登录到它的凭据令牌。

$ echo "$(oc whoami -t)" | docker login -u $USER --password-stdin \
    $(oc get route docker-registry -n default --no-headers | awk '{print $2}')
Login Succeeded

上面做了三件事:

  • 传递从Openshift oc whoami -t检索到的令牌
  • 确定Openshift的注册表URI

    $(oc get route docker-registry -n default --no-headers | awk '{print $2}'`)
    
  • 使用$USER +令牌从上方登录注册表

答案 4 :(得分:0)

我遇到了很多问题,只是想补充一点,环境变量 DOCKER_HOST 对 docker 具有特殊意义,用于定义它连接到的守护进程套接字,导致它无法登录。这里有 docker 使用的环境变量的完整列表:https://docs.docker.com/engine/reference/commandline/cli/

我将环境变量更改为其他内容,例如REG_ 并且有效

docker login --username $REG_USERNAME --password $REG_PASSWORD $REG_HOST

请注意,如果您在 gitlab runner 中执行此操作,并且您已经在使用变量掩码,则无需使用 --password-stdin 标志(您可以,只是没有必要)。