【问题标题】:docker-java equivalent of "docker service create --with-registry-auth"docker-java 相当于“docker service create --with-registry-auth”
【发布时间】:2019-06-21 15:42:00
【问题描述】:

使用https://github.com/docker-java/docker-java 并寻找从https://docs.docker.com/v17.12/engine/reference/commandline/service_create/#options 添加--with-registry-auth 选项的方法

val createCmd = dockerClient.createServiceCmd(
                ServiceSpec()
                        .withName("name")

                        .withTaskTemplate(TaskSpec()
                                .withContainerSpec(ContainerSpec()
                                        .withEnv(envs)
                                        .withImage("image")
                                        .withMounts(mounts)
                                )
                                .withNetworks(networks)
                                .withPlacement(ServicePlacement()
                                        .withConstraints(constraints))
                        )
        )

为了进一步澄清这一点:

我正在寻找 docker-java 方法来执行此命令(这确实有效!):

docker service create --with-registry-auth --constraint 'node.labels.mynodeid==7' myprivateregistry.foo:5000/imagename:latest

像这样删除--with-registry-auth

docker service create --constraint 'node.labels.mynodeid==7' myprivateregistry.foo:5000/imagename:latest

会出现这个错误:No such image: myprivateregistry.foo:5000/imagename:latest,因为凭证是有效的顺便说一句,没有传递给节点。

【问题讨论】:

  • 请说明您在使用此代码时遇到了什么错误。
  • 我没有收到任何错误。我只是不知道如何使用 docker-java API 添加提到的标志。搜索了文档和源代码,但没有找到任何东西。
  • 如果您的 dockerClient 对象本身提供了注册表身份验证,可以吗?
  • 使用.withRegistryUsername(), .withRegistryPassword() 构建 DockerClient 对象并没有改变任何东西。
  • 这两个选项有什么问题,或者你没有输出。

标签: docker docker-java


【解决方案1】:

从 docker-java 3.2.0-rc5 开始,您现在可以指定 authConfig 从私有注册表中提取图像

        AuthConfig authConfig = new AuthConfig()
                .withUsername("testuser")
                .withPassword("testpassword")
                .withEmail("foo@bar.com")
                .withRegistryAddress("your.registry.address.here");

        dockerClient.createServiceCmd(new ServiceSpec()
                .withName(SERVICE_NAME)
                .withTaskTemplate(new TaskSpec()
                        .withContainerSpec(new ContainerSpec()
                                .withImage(DEFAULT_IMAGE))))
                .withAuthConfig(authConfig)
                .exec();

【讨论】:

    【解决方案2】:

    在您的代码中指定 dockerClient 对象本身的注册表身份验证详细信息。

    签出this

    如果它不起作用。首先验证您拥有的注册表身份验证详细信息是否正确,然后手动尝试使用 docker cli 拉取 docker 映像。

    将注册表配置放入 .docker/config.json 文件并尝试拉取 docker 镜像。然后回溯问题。

    【讨论】:

    • 谢谢,docker cli 工作,见问题。我认为 docker-java 没有提供传递选项/标志的方法,或者我找不到方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-22
    • 2015-08-11
    • 2017-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多