Передача приватного изображения в реестр Docker через API Docker - PullRequest
2 голосов
/ 14 марта 2019

Я использую Docker SDK для Python , чтобы поместить локальный репозиторий изображений в реестр Docker (в моем случае DockerHub.)

Я использую метод "push" на "client.images ", описанный в документации здесь .

К сожалению, все опубликованные репозитории являются публичными.Похоже, что нет никакого флага, который можно было бы вставить в частный репозиторий или чтобы убедиться, что переданный репозиторий является частным.Возможно ли это с помощью Docker Python API?

Я пробовал это тремя разными способами (все приводят только к публичному репо):

  1. Метод первый: отдельный вход (работает, норезультаты в публичном репо):
client = docker.from_env()   
auth_client = client.login(username = "kelly_peyton", 
                    password = "nightingale", 
                    email = "kpeyton@prophet5.org", 
                    registry = "docker.io",
                    reauth = True)
# other code here, not shown, to validate login succeeded

cli = APIClient(base_url="unix:///var/run/docker.sock")
br = cli.build(path = temp_local, 
    dockerfile = f"{temp_local}/Dockerfile", 
    tag = docker_repo_reference_tagged)
# other code here, not shown, to validate build succeeded

push_res = cli.push(repository = f"{docker_repo_reference}", 
    tag = docker_repo_tag, 
    stream = False, 
     decode = False)
Метод второй: учетные данные, переданные на push-вызов (работает, но приводит к публичному репо):
client = docker.from_env()   
cli = APIClient(base_url="unix:///var/run/docker.sock")
br = cli.build(path = temp_local, 
    dockerfile = f"{temp_local}/Dockerfile", 
    tag = docker_repo_reference_tagged)
# other code here, not shown, to validate build succeeded

push_res = cli.push(repository = f"{docker_repo_reference}", 
    tag = docker_repo_tag, 
    stream = False, 
    auth_config = {
        "username" : "kelly_peyton",
        "password" : "nightingale", 
        "email" : "kpeyton@prophet5.org", 
        "registry" : "docker.io"
        }, 
    decode = False)
Метод третий: вход в командную строку (не через код) (работает, но приводит к публичному репо):
client = docker.from_env()   
cli = APIClient(base_url="unix:///var/run/docker.sock")
br = cli.build(path = temp_local, 
    dockerfile = f"{temp_local}/Dockerfile", 
    tag = docker_repo_reference_tagged)
# other code here, not shown, to validate build succeeded

push_res = cli.push(repository = f"{docker_repo_reference}", 
    tag = docker_repo_tag, 
    stream = False, 
    decode = False)

Все три метода работают, так как изображение делаетна самом деле меня подталкивают в реестр (в моем случае DockerHub), и, очевидно, аутентификация работает, так как я перехожу в свою личную учетную запись DockerHub.Тем не менее, изображения всегда общедоступны.

1 Ответ

1 голос
/ 14 марта 2019

Вы не можете сделать репозиторий закрытым, установив свои учетные данные в API. Это дает вам возможность выдвинуть изображение только к вашему репо.

Вы должны создать или преобразовать репо в частную. Пожалуйста, прочитайте документацию , чтобы узнать, как это сделать. Как правило, только вы можете подтолкнуть к репо. Если репо публичное, то каждый может скачать, если репо приватное, то только вы можете скачать.

...