Резюме
Я пытаюсь использовать библиотеку docker-java
, но сталкиваюсь с проблемой, когда пытаюсь извлечь изображение. Я пытаюсь извлечь из частного репозитория на ECR.
Что я пробовал
Большая часть реализации, которую я пробовал, возникла из следующего вопроса:
Извлечение образа из Amazon ECR с помощью docker-java
Разница в том, что я реализую это в Котлине. Я разрабатываю на MacOS.
Я могу нормально войти в систему, так как получаю сообщение «Вход выполнен успешно» при выполнении dockerClient.authCmd()
.
Код
val awsCredentialsProvider: AWSCredentialsProvider =
DefaultAWSCredentialsProviderChain()
val ecrClient = AmazonECRClientBuilder.standard()
.withRegion(Regions.EU_WEST_2)
.withCredentials(awsCredentialsProvider)
.build()
val getAuthTokenRequest = GetAuthorizationTokenRequest()
val registryIds = ArrayList<String>()
registryIds.add(registryId)
getAuthTokenRequest.setRegistryIds(registryIds)
val getAuthTokenResult = ecrClient.getAuthorizationToken(getAuthTokenRequest)
val authData = getAuthTokenResult.authorizationData[0]
val userPassword = StringUtils.newStringUtf8(Base64.decode(authData.authorizationToken))
val user = userPassword.substring(0, userPassword.indexOf(":"))
val password = userPassword.substring(userPassword.indexOf(":")+1)
val config = DefaultDockerClientConfig.createDefaultConfigBuilder()
config.withDockerTlsVerify(false)
config.withRegistryUsername(user)
config.withRegistryPassword(password)
config.withRegistryUrl(authData.proxyEndpoint)
config.build()
//Docker client
val dockerClient = DockerClientBuilder.getInstance(config)
.withDockerCmdExecFactory(JerseyDockerCmdExecFactory())
.build()
val response = dockerClient.authCmd().exec()
println(response.status)
val pullImageCmd = dockerClient
.pullImageCmd(nameOfRepository)
.withAuthConfig(dockerClient.authConfig())
.withRepository(nameOfRepository)
pullImageCmd
.exec(PullImageResultCallback())
.awaitCompletion()
Результат
Я и выше получаю следующую ошибку:
Caused by: com.github.dockerjava.api.exception.InternalServerErrorException: {"message":"Get https://registry-1.docker.io/v2/{name_of_repo}/tags/list: unauthorized: incorrect username or password"}
Должен ли registry-1.docker.io/v2/
в URI не быть моим собственным репо? Может ли кто-нибудь пролить свет на мою проблему?
~/.aws/credentials
на моем компьютере так же, как я бы делал это из командной строки. Я могу успешно войти в систему с помощью команды auth, которая использует правильный реестр:https://{name_of_registry}.dkr.ecr.eu-west-2.amazonaws.com/v2/
. Я попытался ввести неверный пароль для подтверждения, и он завершился ошибкой 400 Bad Request. Когда вызывается pullImageCmd, если это не вызовhttps://{name_of_registry}.dkr.ecr.eu-west-2.amazonaws.com/v2/{name_of_repo}/tags/list
- person Daniel McC   schedule 28.05.2019