如何在脚本中预先设置docker login
命令的凭据?
我使用的bash脚本基本上可以自动完成设置自定义虚拟机等的整个过程,但是当我需要在脚本中登录docker来获取图像时,我收到以下错误:
用户名:FATA [0000]设备的不适当的ioctl
我使用的命令如下:
( echo "xxx"; echo "yyy"; echo "zzz" ) | docker login docker.somesite.org
这是否可以在不使用和处理现有.dockercfg
文件的情况下实现,以及如何实现
非常感谢。
答案 0 :(得分:32)
现在有officially-documented方法可以做到这一点:
cat ~/my_password.txt | docker login --username foo --password-stdin
您可以在命令行上传递所有参数:
docker login --username=$DOCKER_USER --password=$DOCKER_PASS $DOCKER_HOST
如果您没有指定DOCKER_HOST
,那么您将获得主要的Docker回购。如果省略任何参数,系统会提示您输入该参数。
与上面相同的路径,除了您需要还传递--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
上面做了三件事:
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
标志(您可以,只是没有必要)。