瞭望塔与 GCR 的 gcloud cred 助手
Watchtower with GCR's gcloud cred helper
有没有人想出如何从 docker compose 的 containrrr watchtower 图像中的私有 GCR 存储库中提取?
对于上下文,我在主机中 运行 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."
我不熟悉守望台,但熟悉 GCR。
如果您想对 GCR 进行身份验证,然后仅通过 Docker 注册表 API(即 docker [push|pull]
等)的客户端与其交互,那么您可能需要考虑创建一个适当的 IAM'd 服务帐户、一个密钥并通过卷安装将密钥安装到 Watchtower 中。然后,您将能够使用 docker login ...
进行身份验证并避免安装|使用 Google Cloud SDK (gcloud
)。
参见:
https://cloud.google.com/container-registry/docs/advanced-authentication#json-key
我找到了解决办法。需要注意的是,gcloud 助手需要 python 安装才能工作。因此,即使您将所有配置和二进制文件添加到您的 watchtower 容器中,它仍然无法 运行 正确。
作为解决方案,我提出了一个安装了瞭望塔和 python3 的最小 docker 图像。是 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"
}
}
有没有人想出如何从 docker compose 的 containrrr watchtower 图像中的私有 GCR 存储库中提取?
对于上下文,我在主机中 运行 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."
我不熟悉守望台,但熟悉 GCR。
如果您想对 GCR 进行身份验证,然后仅通过 Docker 注册表 API(即 docker [push|pull]
等)的客户端与其交互,那么您可能需要考虑创建一个适当的 IAM'd 服务帐户、一个密钥并通过卷安装将密钥安装到 Watchtower 中。然后,您将能够使用 docker login ...
进行身份验证并避免安装|使用 Google Cloud SDK (gcloud
)。
参见: https://cloud.google.com/container-registry/docs/advanced-authentication#json-key
我找到了解决办法。需要注意的是,gcloud 助手需要 python 安装才能工作。因此,即使您将所有配置和二进制文件添加到您的 watchtower 容器中,它仍然无法 运行 正确。
作为解决方案,我提出了一个安装了瞭望塔和 python3 的最小 docker 图像。是 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"
}
}