使用 fabric8 java 客户端将 docker 图像推送到远程注册表

Push docker image to remote registry using fabric8 java client

我正在尝试使用 fabric8 docker client 将 docker 图像推送到 docker 集线器 java。

我在尝试推送图像时遇到以下错误。

The push refers to repository [docker.io/anuruddhal/hello-world-docker] Failure:denied: requested access to the resource is denied

如何正确验证客户端?

以下是我的代码:

public static void pushImage(DockerModel dockerModel) throws InterruptedException, IOException {

        String dockerUrl = "unix:///var/run/docker.sock";
        String image = dockerModel.getName();
        String registry = "index.docker.io";
        String namespace = "anuruddhal";

        String repositoryName = registry + "/" + namespace + "/" + image;

        Config config = new ConfigBuilder()
                .withDockerUrl(dockerUrl)
                .withUsername("anuruddhal")
                .withPassword("xxxxxxxxx")
                .build();

        DockerClient client = new DefaultDockerClient(config);
        final CountDownLatch pushDone = new CountDownLatch(1);

        client.image().withName(image).tag().inRepository(repositoryName).force().withTagName("1.0");

        OutputHandle handle = client.image().withName(repositoryName).push()
                .usingListener(new EventListener() {
                    @Override
                    public void onSuccess(String message) {
                        printSuccess("Success:" + message);
                        pushDone.countDown();
                    }

                    @Override
                    public void onError(String messsage) {
                        printError("Failure:" + messsage);
                        pushDone.countDown();
                    }

                    @Override
                    public void onError(Throwable t) {
                        printError(t.getMessage());
                        pushDone.countDown();
                    }

                    @Override
                    public void onEvent(String event) {
                        printDebug(event);
                    }
                })
                .withTag("1.0")
                .toRegistry();

        pushDone.await();
        handle.close();
        client.close();
    }

我想通了。

您需要将身份验证配置与注册表一起添加到客户端 URL。

AuthConfig authConfig = new AuthConfigBuilder().withUsername("anuruddhal").withPassword
                ("xxxxxxx")
                .build();
        Config config = new ConfigBuilder()
                .withDockerUrl(dockerUrl)
                .addToAuthConfigs("index.docker.io", authConfig)
                .build();