docker-java 相当于 "docker service create --with-registry-auth"

docker-java equivalent of "docker service create --with-registry-auth"

使用https://github.com/docker-java/docker-java and looking for a way to add the --with-registry-auth option from https://docs.docker.com/v17.12/engine/reference/commandline/service_create/#options

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 因为顺便说一句,有效的凭据未传递到节点。

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

检查 this

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

手动拉取 docker 图像

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

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