Я использую Docker SDK для Python , чтобы поместить локальный репозиторий изображений в реестр Docker (в моем случае DockerHub.)
Я использую метод "push" на "client.images ", описанный в документации здесь .
К сожалению, все опубликованные репозитории являются публичными.Похоже, что нет никакого флага, который можно было бы вставить в частный репозиторий или чтобы убедиться, что переданный репозиторий является частным.Возможно ли это с помощью Docker Python API?
Я пробовал это тремя разными способами (все приводят только к публичному репо):
- Метод первый: отдельный вход (работает, норезультаты в публичном репо):
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.Тем не менее, изображения всегда общедоступны.