如何用 docker-java 播放 docker 运行 --rm?

How to play a docker run --rm with docker-java?

在我们的J2EE项目中,我们要调用sjourdan/ffmpeg docker through the docker-java库。

典型的 ffmpeg 转换调用类似于:

docker run --rm -v /e/data:/tmp/workdir sjourdan/ffmpeg -i /tmp/workdir/test.mov -f mp4 -vcodec libx264 -acodec aac /tmp/workdir/test.mp4

我们使用 DockerClient.createContainerCmd() 和正确的 .with() 方法管理所有这些,--rm 参数除外。

有没有办法通过docker-java添加?

根据 --rm 不由 Docker API 处理,所以我们没有运气 docker-java 要么。

所以,最后我们小心翼翼的在执行完之后把容器去掉,像这样:

dockerClient.startContainerCmd(container.getId()).exec();
// do some stuff
dockerClient.removeContainerCmd(container.getId()).withForce(true).exec();

您可以将 "AutoRemove" 值发送到 docker API:

String containerId = dockerClient.createContainerCmd(image).
    withHostConfig(new HostConfig() {
        @JsonProperty("AutoRemove")
        public boolean autoRemove = true;
    }).exec().getId();
dockerClient.startContainerCmd(containerId).exec();

就是这样

Docker API 信息 https://docs.docker.com/engine/api/v1.37/#operation/ContainerCreate

"AutoRemove" 至少从 v1.25

开始被接受

对于当前版本,即 3.2.8,您可以设置自动删除选项:

dockerClient.createContainerCmd(image).withHostConfig(new HostConfig().withAutoRemove(true)).exec()