Сервис создания Docker Swarm не может извлечь из удаленного хранилища - PullRequest
0 голосов
/ 25 августа 2018

Я создал два экземпляра Docker Swarm в Google Compute Engine.

Docker версия 18.06.1-ce, сборка e68fc7a на Ubuntu 18.04.1 LTS

Я создал учетную запись службы:

gcloud iam service-accounts create ${KEY_NAME} --display-name "${KEY_DISPLAY_NAME}"
gcloud projects add-iam-policy-binding $PROJECT --member serviceAccount:${KEY_NAME}@${PROJECT}.iam.gserviceaccount.com --role roles/storage.admin
gcloud iam service-accounts keys create --iam-account ${KEY_NAME}@${PROJECT}.iam.gserviceaccount.com key.json

Передал key.json моему мастеру докера:

Затем я выполнил следующие команды:

gcloud auth configure-docker
cat key.json | tr '\n' ' ' | docker login -u _json_key --password-stdin \
    https://eu.gcr.io

Я могу успешно извлечь изображение из моего личного репозитория eu.gcr.io:

docker pull eu.gcr.io/$PROJECT/$IMAGE

Итак, вход в систему работает, и помощник gcloud, похоже, установлен правильно.

Но создать службу в моем рое не удается:

docker service create --replicas 2 --network overlay --name $NAME eu.gcr.io/$PROJECT/$IMAGE --with-registry-auth
image eu.gcr.io/$PROJECT/$IMAGE:latest could not be accessed on a registry to record
its digest. Each node will access eu.gcr.io/$PROJECT/$IMAGE:latest independently,
possibly leading to different nodes running different versions of the image.
qwdm524vggn50j4lzoe5paknj
overall progress: 0 out of 2 tasks 
1/2: No such image: eu.gcr.io/$PROJECT/$IMAGE:latest 
2/2: No such image: eu.gcr.io/$PROJECT/$IMAGE:latest 

Просмотр в системном журнале показывает следующее:

Aug 25 13:37:15 mgr-1 dockerd[1368]: time="2018-08-25T13:37:15.299064551Z" level=info msg="Attempting next endpoint for pull after error: 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"
Aug 25 13:37:15 mgr-1 dockerd[1368]: time="2018-08-25T13:37:15.299168218Z" level=error msg="pulling image failed" error="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" module=node/agent/taskmanager node.id=xgozmc8iyjls7ulh4k3tvions service.id=qwdm524vggn50j4lzoe5paknj task.id=qrktpo34iuhiyl1rmbi71y4wg

AFAICS, я использую правильную служебную учетную запись JSON для входа в Google Container Repository (как работает docker pull), я добавил флаг --with-registry-auth к docker create service, который был ответом на подобные вопросы , но все равно это не работает. docker create service работает аналогично docker pull?

Есть идеи, как мне это решить?

UPDATE

Вместо Реестра Контейнеров Google я также попробовал Реестр Gitlab. Создал токен развертывания реестра на сайте Gitlab и ввел следующие команды:

docker login registry.gitlab.com -u $USERNAME -p $PASSWORD

Тогда это просто работает:

docker pull registry.gitlab.com/$ORGANISATION/$PROJECT/$IMAGE

Но эта команда завершается с ошибкой:

docker service create --replicas 2 --network overlay  --name $NAME registry.gitlab.com/$ORGANISATION/$PROJECT/$IMAGE --with-registry-auth

image registry.gitlab.com/$ORGANISATION/$PROJECT/$IMAGE:latest could not be accessed on a registry to record
its digest. Each node will access registry.gitlab.com/$ORGANISATION/$PROJECT/$IMAGE:latest independently,
possibly leading to different nodes running different
versions of the image.
r5fqg94jrvt587le0fu779zaw
overall progress: 0 out of 2 tasks 
1/2: No such image: $ORGANISATION/$PROJECT/$IMAGE:latest
2/2: No such image: $ORGANISATION/$PROJECT/$IMAGE:latest

А /var/log/syslog содержит

Aug 25 21:56:14 mgr-1 dockerd[1368]: time="2018-08-25T21:56:14.615895063Z" level=error msg="pulling image failed" error="Get https://registry.gitlab.com/v2/$ORGANISATION/$PROJECT/$IMAGE/manifests/latest: denied: access forbidden" module=node/agent/taskmanager node.id=xgozmc8iyjls7ulh4k3tvions service.id=r5fqg94jrvt587le0fu779zaw task.id=huwpjtu1wujk527t84y7yvbvd

Похоже, что docker create service не использует предоставленные учетные данные, и проблема не связана ни с реестром контейнеров Google, ни с реестром Gitlab?

1 Ответ

0 голосов
/ 26 августа 2018

ОК, я нашел проблему.Я должен был использовать:

docker service create --with-registry-auth --replicas 2 --network overlay  --name $NAME registry.gitlab.com/$ORGANISATION/$PROJECT/$IMAGE

вместо

docker service create --replicas 2 --network overlay  --name $NAME registry.gitlab.com/$ORGANISATION/$PROJECT/$IMAGE --with-registry-auth

В последнем случае --with-registry-auth считался аргументом моего изображения, а не вызовом docker service create и, следовательно,аутентификация не использовалась для извлечения изображений из частного хранилища.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...