Сторожевая башня с помощником 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