Получение из частного репо в кубернетах завершается ошибкой с "Секретными" учетными данными докера "недопустимы: данные [.dockerconfigjson]: Требуемое значение"

Я пытаюсь извлечь изображения из репозитория Docker Hub. Я следил за документацией, найденной здесь: https://kubernetes.io/docs/tasks/configure-pod-container/pull-image-private-registry/

Однако после ввода команды:

kubectl создать секретные общие учетные данные докеров --from-file= / my / local / path / to /.docker / config.json --type=kubernetes.io / dockerconfigjson

Я получаю следующую ошибку:

Секрет "docker-credentials" недействителен: data [.dockerconfigjson]: Обязательное значение

Я попытался удалить config.json и повторно войти в систему, но без изменений в поведении.

версия докера печатает:

Client: Docker Engine - Community
 Version:           19.03.5
 API version:       1.40
 Go version:        go1.12.12
 Git commit:        633a0ea838
 Built:             Wed Nov 13 07:29:52 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          19.03.5
  API version:      1.40 (minimum version 1.12)
  Go version:       go1.12.12
  Git commit:       633a0ea838
  Built:            Wed Nov 13 07:28:22 2019
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.2.10
  GitCommit:        b34a5c8af56e510852c35414db4c1f4fa6172339
 runc:
  Version:          1.0.0-rc8+dev
  GitCommit:        3e425f80a8c931f88e6d94a8c831b9d5aa481657
 docker-init:
  Version:          0.18.0
  GitCommit:        fec3683

Версия kubectl печатает:

Client Version: version.Info{
  Major:"1",
  Minor:"17",
  GitVersion:"v1.17.2",
  GitCommit:"59603c6e503c87169aea6106f57b9f242f64df89",
  GitTreeState:"clean",
  BuildDate:"2020-01-18T23:30:10Z",
  GoVersion:"go1.13.5",
  Compiler:"gc",
  Platform:"linux/amd64"
}
Server Version: version.Info{
  Major:"1",
  Minor:"15",
  GitVersion:"v1.15.2",
  GitCommit:"f6278300bebbb750328ac16ee6dd3aa7d3549568",
  GitTreeState:"clean",
  BuildDate:"2019-08-05T09:15:22Z",
  GoVersion:"go1.12.5",
  Compiler:"gc",
  Platform:"linux/amd64"
}

config.json выглядит так:

{
    "auths": {
        "https://index.docker.io/v1/": {
            "auth": "secret-stuff"
        }
    },
    "HttpHeaders": {
        "User-Agent": "Docker-Client/19.03.5 (linux)"
    }
}

На данный момент я могу ввести учетные данные вручную, но я хотел бы понять, что происходит не так. любая помощь будет оценена!

3 ответа

Я столкнулся с той же проблемой с kubectl create secret generic --type=kubernetes.io/dockerconfigjsonСекрет« xxx »недействителен: данные [.dockerconfigjson]: Required value »), и это произошло из-за ошибки в командной строке, которая, я думаю, есть и в команде Маркуса.

Я имел:

--from-file=/run/user/xxxx/containers/auth.json

Это должно было быть:

--from-file=.dockerconfigjson=/run/user/xxxx/containers/auth.json

Я неправильно интерпретировал параметр --from-file как путь к файлу, но он принимает значение key = value, которое, как я полагаю, в данном случае должно быть ключом ".dockerconfigjson".

Ответ Кроу намекает на --from-file как на виновника, но я подумал, что добавлю ответ, чтобы разъяснить, чего не хватает. (И я думаю, что дело в файле type отсутствие сообщения вводило в заблуждение, потому что в команде есть опция --type, поэтому я пропустил этот ответ изначально, когда смотрел на этот вопрос за помощью.)

Обратите внимание, что я получил подсказку о том, что было не так, запустив kubectl в подробном режиме (--v = N, см. Https://kubernetes.io/docs/reference/kubectl/cheatsheet/#kubectl-output-verbosity-and-debugging ), в котором kubectl сообщал серверу API структуру ресурса Secret, а структура не говорила «.dockerconfigjson», как я ожидал из примеров Secret YAML в документации Kubernetes.

При создании secret вы не указали Type файла, из которого вы будете читать, kubectl не прочитал файл должным образом.

Список типов следующий:

SecretTypeOpaque SecretType = "Opaque"
[...]
SecretTypeServiceAccountToken SecretType = "kubernetes.io/service-account-token"
[...]
SecretTypeDockercfg SecretType = "kubernetes.io/dockercfg"
[...]
SecretTypeDockerConfigJSON SecretType = "kubernetes.io/dockerconfigjson"
[...]
SecretTypeBasicAuth SecretType = "kubernetes.io/basic-auth"
[...]
SecretTypeSSHAuth SecretType = "kubernetes.io/ssh-auth"
[...]
SecretTypeTLS SecretType = "kubernetes.io/tls"
[...]
SecretTypeBootstrapToken SecretType = "bootstrap.kubernetes.io/token"

который вы можете найти на Kubernetes GitHub kubernetes / pkg / apis / core / types.go

Правильная команда в вашем случае будет kubectl create secret generic docker-credentials --from-file=.dockerconfigjson=path/to/.docker/config.json --type=kubernetes.io/dockerconfigjson

Пожалуйста, обратите внимание на --from-file=.dockerconfigjson=path/to/.docker/config.json, вы должны только редактировать path/to/.docker/config.json

Вы не запускали команду входа в docker с частным репозиторием docker, поэтому файл config.json не содержит информации для аутентификации. Вы можете сослаться на приведенный ниже образец файла.

Пример:

  {
    "auths": {

     "https://dockerhub.xxxxx.com": {
        "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
        "email": "xxxxx@xxxxx.com"
     }
   },
   "HttpHeaders": {
      "User-Agent": "Docker-Client/18.06.1-ce (linux)"
   }
 }
Другие вопросы по тегам