相当于“ docker服务创建--with-registry-auth”的docker-java

时间:2019-06-21 15:42:00

标签: docker docker-java

使用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,因为有效的凭据未传递到节点。

2 个答案:

答案 0 :(得分:0)

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

检出this

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

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

答案 1 :(得分:0)

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