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();
使用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();