0

有没有人知道如何从docker compose的containrrr瞭望塔图像中的私有GCR repos中提取?

作为上下文,我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."
4

2 回答 2

1

我找到了解决方案。需要注意的是,gcloud 帮助程序需要安装 python 才能工作。因此,即使您将所有配置和二进制文件添加到了望塔容器中,它仍然无法正常运行。

作为一个解决方案,我想出了一个最小的 docker 镜像,它同时安装了 watchtower 和 python3。是yspreen/watchtower您可以在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"
  }
}
于 2021-06-07T11:02:12.057 回答
0

我不熟悉Watchtower,但熟悉GCR。

如果您想对 GCR 进行身份验证,然后仅通过 Docker Registry API 的客户端(即docker [push|pull]等)与之交互,那么您可能需要考虑创建一个适当的 IAM 服务帐户、一个密钥并通过卷安装密钥登上了望塔。然后,您将能够使用docker login ...并避免需要安装|使用 Google Cloud SDK ( gcloud) 进行身份验证。

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

于 2021-06-04T15:20:03.043 回答