Сторожевая башня с помощником GCR gcloud cred

Кто-нибудь понял, как вытащить из частных репозиториев GCR в образе сторожевой башни containrrr в docker compose?

Для контекста я побежал gcloud auth configure-docker в хосте и добавил эти тома в сторожевую башню:

      version: "3.4"
services:
  app:
    image: gcr.io/<proj>/<img>:latest
  watchtower:
    image: containrrr/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.docker/config.json:/config.json
      - /root/.config/gcloud:/.config/gcloud
      - /usr/lib/google-cloud-sdk:/usr/lib/google-cloud-sdk
    command: --interval 10
    environment:
      - PATH=$PATH:/usr/lib/google-cloud-sdk/bin
      - HOME=/
    labels:
      - com.centurylinklabs.watchtower.enable=false

Он просто продолжает говорить

      watchtower_1  | time="2021-06-03T22:36:13Z" level=info msg="Unable to update container \"/gce_app_1\": Error response from daemon: unauthorized: You don't have the needed permissions to perform this operation, and you may have invalid credentials. To authenticate your request, follow the steps in: https://cloud.google.com/container-registry/docs/advanced-authentication. Proceeding to next."

2 ответа

Решение

Я нашел решение. Предостережение заключается в том, что для работы помощника gcloud требуется установка python. Таким образом, даже если вы добавите все конфигурации и двоичные файлы в контейнер сторожевой башни, он все равно не будет работать должным образом.

В качестве решения я придумал минимальный образ докера, в котором установлены как сторожевая башня, так и python3. Это yspreen/watchtower. Вы можете найти полный файл readme на github, но вот краткое изложение:

      version: "3.4"
services:
  app:
    image: gcr.io/<project>/<image>:latest
  watchtower:
    image: yspreen/watchtower
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /root/.docker/config.json:/config.json
      - /root/.config/gcloud:/.config/gcloud
      - /usr/lib/google-cloud-sdk:/usr/lib/google-cloud-sdk
    command: --cleanup --interval 10
    environment:
      - PATH=$PATH:/usr/lib/google-cloud-sdk/bin
      - HOME=/
    labels:
      - com.centurylinklabs.watchtower.enable=false

Файл конфигурации:

      {
  "credsStore": "gcloud",
  "credHelpers": {
    "gcr.io": "gcloud",
    "us.gcr.io": "gcloud",
    "eu.gcr.io": "gcloud",
    "asia.gcr.io": "gcloud",
    "staging-k8s.gcr.io": "gcloud",
    "marketplace.gcr.io": "gcloud"
  }
}

I'm unfamiliar with Watchtower but familiar with GCR.

If you want to authenticate to GCR and then interact with it solely through clients of the Docker Registry API (i.e. docker [push|pull] etc.), then you may want to consider creating a suitably IAM'd Service Account, a key and mounting the key via a volume mount into Watchtower. Then, you will be able to authenticate using docker login ... and avoid needing to install|use the Google Cloud SDK ( gcloud).

See:https://cloud.google.com/container-registry/docs/advanced-authentication#json-key

Другие вопросы по тегам