ошибка проверки подлинности gcloud docker x509

Я получаю ошибки аутентификации при попытке нажать на Google container repository. Я вижу много вопросов по этому поводу и пройду через шаги, которые я сделал, основываясь на дополнительных предложениях. Я работаю локально на Windows, с последней версией gcloud и docker.

Начнем с того, что у меня есть активная учетная запись службы с полными правами владельца.

Введите описание изображения здесь

I can see into my project and bucket just fine.

C:Program Files (x86)GoogleCloud SDK>gsutil acl get gs://api-project-773889352370-ml
[
  {
    "entity": "project-owners-773889352370",
    "projectTeam": {
      "projectNumber": "773889352370",
      "team": "owners"
    },
    "role": "OWNER"
  },
  {
    "entity": "project-editors-773889352370",
    "projectTeam": {
      "projectNumber": "773889352370",
      "team": "editors"
    },
    "role": "OWNER"
  },
  {
    "entity": "project-viewers-773889352370",
    "projectTeam": {
      "projectNumber": "773889352370",
      "team": "viewers"
    },
    "role": "READER"
  }
]

Я могу скачать a .JSON ключ для моей учетной записи службы и активировать его локально.

gcloud auth activate-service-account --key-file C:/Users/Ben/Dropbox/Google/MeerkatReader-9fbf10d1e30c.json

У меня есть рабочий набор докеров и Логинов

C:Program Files (x86)GoogleCloud SDK>docker push bw4sz/hello-world
The push refers to a repository [docker.io/bw4sz/hello-world]
a02596fdd012: Layer already exists
latest: digest: sha256:a18ed77532f6d6781500db650194e0f9396ba5f05f8b50d4046b294ae5f83aa4 size: 524

Я помечаю свой тестовый образ (hello-world) именем хоста и идентификатором проекта и даю ему попробовать

C:Program Files (x86)GoogleCloud SDK>gcloud docker --push gcr.io/api-project-773889352370/hello-world

ERROR: Docker CLI operation failed:

Error response from daemon: Get https://gcr.kubernetes.io/v1/users/: x509: certificate has expired or is not yet valid

ERROR: (gcloud.docker) Docker login failed.

Хорошо, давайте перейдем к расширенным методам auth, предложенным здесь, здесь и здесь

В документации говорится, что я могу обойти gcloud и использовать docker напрямую, просто передайте мой .JSON keyfile для входа в систему.

C:Program Files (x86)GoogleCloud SDK>docker login -u _json_key -p "$(cat C:/Users/Ben/Dropbox/Google/MeerkatReader-d77c0d6aa04f.json)" https://gcr.io
Error response from daemon: Get https://gcr.io/v2/: unknown: Unable to parse json key.

Документы говорят, чтобы сделать это в два шага, давайте попробуем это:

C:Program Files (x86)GoogleCloud SDK>set /p PASS=<C:/Users/Ben/Dropbox/Google/MeerkatReader-9fbf10d1e30c.json
C:Program Files (x86)GoogleCloud SDK>docker login -e 1234@5678.com -u _json_key -p "%PASS%" https://gcr.io
Flag --email has been deprecated, will be removed in 1.13.
Error response from daemon: Get https://registry-1.docker.io/v2/: unauthorized: incorrect username or password

Еще одно предложение — использовать временный токен

C:Program Files (x86)GoogleCloud SDK>docker login -e 1234@5678.com -u _token -p "$(gcloud auth print-access-token)" https://gcr.io
Flag --email has been deprecated, will be removed in 1.13.
Login Succeeded

Отлично давайте попробуем нажать еще раз.

C:Program Files (x86)GoogleCloud SDK>docker push gcr.io/api-project-773889352370/hello-world
The push refers to a repository [gcr.io/api-project-773889352370/hello-world]
a02596fdd012: Preparing
denied: Unable to create the repository, please check that you have access to do so.

Я видел, что кто-то предлагает просто нажать на ведро, а не ID проекта, который просто висит

C:Program Files (x86)GoogleCloud SDK>docker push gcr.io/api-project-773889352370-ml/hello-world
The push refers to a repository [gcr.io/api-project-773889352370-ml/hello-world]
a02596fdd012: Retrying in 1 second <- goes on forever.

РЕДАКТИРОВАТЬ:
Пробовать решение предложения

C:Program Files (x86)GoogleCloud SDK>gcloud auth activate-service-account --key-file C:/Users/Ben/Dropbox/Google/MeerkatReader-9fbf10d1e30c.json
Activated service account credentials for: [773889352370-compute@developer.gserviceaccount.com]

C:Program Files (x86)GoogleCloud SDK>gcloud docker -a -s gcr.io
Short-lived access for ['gcr.io'] configured.

C:Program Files (x86)GoogleCloud SDK>docker push gcr.io/api-project-773889352370/hello-world
The push refers to a repository [gcr.io/api-project-773889352370/hello-world]
a02596fdd012: Preparing
denied: Unable to create the repository, please check that you have access to do so.

2 ответа

  1. Спасибо за сообщение о проблеме!

    gcloud docker аутентифицирует вас для всех поддерживаемых реестров GCR, по умолчанию . gcr.kubernetes.срок действия сертификата ввода-вывода истек до его обновления, что не нравится клиенту Docker (если клиент Docker использует хранилище учетных данных, gcloud dockerон будет вызывать docker loginкаждый поддерживаемый реестр). gcr.kubernetes.io следует удалить из списка поддерживаемых реестров в gcloud SDK v141.0.0.

    В то же время, вы можете обойти эту проблему, выполнив gcloud docker -a -s gcr.io(и/или ЕС.gcr.io, us.gcr.io, etc.) и затем использование клиента naked Docker для выполнения фактических команд, например docker push gcr.io/api-project-773889352370/hello-world.

  2. Its a bit of a hack, but the only solution I can find is to

    1. Push image to dockerhub
    2. Запуск экземпляра вычислительного ядра
    3. установите docker (осторожно, какая версия у меня была 1.6, мне нужно будет перейти > 1.9 в будущем, согласно GCR docs)
    4. Вытяните изображение из dockerhub
    5. gcloud docker push to GCR

    Это сработало для меня. Не лучшее решение. Я приветствую предложения.