Почему я получаю https://registry-1.docker.io/v2/{reponame}/tags/list: неавторизованный: неправильное имя пользователя или пароль?

Резюме

Я пытаюсь использовать библиотеку 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 не быть моим собственным репо? Может ли кто-нибудь пролить свет на мою проблему?


person Daniel McC    schedule 28.05.2019    source источник
comment
вероятно, потому что вы использовали неправильное имя пользователя или пароль, или потому что у вас нет прав на вход   -  person Stultuske    schedule 28.05.2019
comment
Учетные данные берутся из файла ~/.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