From 80679f48c5fbb5165778ff0e05d59a8a7b6134b7 Mon Sep 17 00:00:00 2001 From: Marcus Thiesen Date: Tue, 21 Jul 2015 16:20:59 +0200 Subject: [PATCH] Stop leaking tar files in temporary folder The temporary tar files generated from the docker folder are preserved after the contents is send to the docker deamon. In order to prevent filling up the temporary directory those files must be deleted. As the API is based on InputStreams the easiest solution is to wrap the input stream an delete the file on close. --- .../core/dockerfile/Dockerfile.java | 48 ++++++++++++------- 1 file changed, 31 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java b/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java index 8c26c4932..fe1a18f68 100644 --- a/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java +++ b/src/main/java/com/github/dockerjava/core/dockerfile/Dockerfile.java @@ -1,19 +1,5 @@ package com.github.dockerjava.core.dockerfile; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Collection; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.UUID; - -import org.apache.commons.io.FileUtils; -import org.apache.commons.io.FilenameUtils; -import org.apache.commons.io.filefilter.TrueFileFilter; - import com.github.dockerjava.api.DockerClientException; import com.github.dockerjava.core.CompressArchiveUtil; import com.github.dockerjava.core.FilePathUtil; @@ -24,6 +10,20 @@ import com.google.common.base.Objects; import com.google.common.base.Optional; import com.google.common.collect.Collections2; +import org.apache.commons.io.FileUtils; +import org.apache.commons.io.FilenameUtils; +import org.apache.commons.io.IOUtils; +import org.apache.commons.io.filefilter.TrueFileFilter; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.UUID; /** * Parse a Dockerfile. @@ -130,15 +130,29 @@ public InputStream buildDockerFolderTar() { public InputStream buildDockerFolderTar(File directory) { - // ARCHIVE TAR File dockerFolderTar = null; try { - String archiveNameWithOutExtension = UUID.randomUUID().toString(); + final String archiveNameWithOutExtension = UUID.randomUUID().toString(); dockerFolderTar = CompressArchiveUtil.archiveTARFiles(directory, filesToAdd, archiveNameWithOutExtension); - return FileUtils.openInputStream(dockerFolderTar); + + final InputStream tarInputStream = FileUtils.openInputStream(dockerFolderTar); + final File tarFile = dockerFolderTar; + + return new InputStream() { + @Override + public int read() throws IOException { + return tarInputStream.read(); + } + + @Override + public void close() throws IOException { + IOUtils.closeQuietly(tarInputStream); + FileUtils.deleteQuietly(tarFile); + } + }; } catch (IOException ex) { FileUtils.deleteQuietly(dockerFolderTar);