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

时间:2018-02-23 10:18:34

标签: java docker fabric8

我正在尝试使用fabric8 docker client将Docker镜像推送到dockerhub for java。

尝试推送图像时出现以下错误。

  

推送指的是存储库   [docker.io/anuruddhal/hello-world-docker]失败:被拒绝:请求   拒绝访问资源

如何正确验证客户端?

以下是我的代码:

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();
    }

1 个答案:

答案 0 :(得分:0)

我明白了。

您需要将auth config与注册表URL一起添加到客户端。

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