Docker-swarm автоматически извлекает отсутствующее изображение из частного docker-реестра

#authentication #docker #docker-registry #docker-swarm

#аутентификация #docker #docker-реестр #docker-swarm

Вопрос:

У нас есть кластер docker-swarm. Узел manager содержит учетные данные для нашего частного реестра docker. Когда мы запускаем новые контейнеры на других узлах, изображение может потребоваться извлечь из частного реестра docker.

Есть ли способ сообщить команде контейнера crate извлечь изображение (если оно еще не существует на узле) и предоставить ему учетные данные?

Например: мы хотим вызвать следующую команду из диспетчера swarm (у которого есть учетные данные для частного реестра docker):

 docker create -e contraint:server==app docker.exampleRegistry.com/path/image:1.0.0
 

Это должно извлечь изображение и запустить контейнер на другом узле (помеченный app ). Реестр docker docker.exampleRegistry.com является частным. Но мы получаем:

 Error response from daemon: unauthorized: authentication required
 

Ответ №1:

Понял! Возможно, docker cli не способен этого сделать (как и наш драйвер Java), но docker remote API может сделать это, используя заголовок X-Registry-Auth для предоставления учетных данных:

 curl -v -X POST -H "Content-Type: application/json"
-H "X-Registry-Auth: <base64ecoded({"username": "string", "password": "string", "email": "string", "serveraddress" : "string", "auth": ""})>"
-d '{"Image": "docker.exampleRegistry.com/path/image:1.0.0", "Env": ["contraint:server==app"]}'
https://localhost:2376/containers/create?name=container 
--key path_to_key 
--cacert path_to_ca
 

https://github.com/docker/docker/blob/master/docs/reference/api/docker_remote_api.md#authentication