diff --git a/build.gradle b/build.gradle index 98d742f0ce25c9ff2959c2ca78219cfd00db9279..7a6dd973a75bd744504e363bae1fe1a029e39a08 100644 --- a/build.gradle +++ b/build.gradle @@ -26,7 +26,7 @@ allprojects { apply plugin: ScompPlugin group 'nl.tudelft.ewi' - version = '2.3.3' + version = '2.3.4' sourceCompatibility = '1.11' targetCompatibility = '1.11' diff --git a/worker/src/main/java/nl/tudelft/ewi/auta/checker/generic/docker/DockerRunner.java b/worker/src/main/java/nl/tudelft/ewi/auta/checker/generic/docker/DockerRunner.java index cd1ccb90b541fff622f2fbca5ad5b30c3daa6561..c0ab2994b95df42a4a239f543d123b137939b9e0 100644 --- a/worker/src/main/java/nl/tudelft/ewi/auta/checker/generic/docker/DockerRunner.java +++ b/worker/src/main/java/nl/tudelft/ewi/auta/checker/generic/docker/DockerRunner.java @@ -36,6 +36,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.zip.GZIPOutputStream; @@ -68,6 +69,16 @@ public class DockerRunner extends JobAnalyzer { */ private static final Path OUTPUT_PATH = BASE_PATH.resolve("out"); + /** + * The pattern matching characters that are not allowed in Docker image names. + */ + private static final Pattern DOCKER_CONTAINER_NAME_ILLEGALS = Pattern.compile("[^a-zA-Z0-9_-]"); + + /** + * The default memory limit to give to containers. + */ + private static final long DEFAULT_MEMORY_LIMIT = 4L * 1024 * 1024 * 1024; + /** * The Docker API instance to use. */ @@ -175,7 +186,14 @@ public class DockerRunner extends JobAnalyzer { final var config = new HashMap<String, Object>(); config.put("Image", id); - final var container = this.api.createContainer(config); + config.put("HostConfig", Map.of( + "Memory", DEFAULT_MEMORY_LIMIT, + "MemorySwap", DEFAULT_MEMORY_LIMIT + )); + final var container = this.api.createContainer( + "auta-job-" + DOCKER_CONTAINER_NAME_ILLEGALS.matcher(id).replaceAll("_"), + config + ); logger.info("Created container with ID {}", container); return container; diff --git a/worker/src/main/java/nl/tudelft/ewi/auta/checker/generic/docker/api/DockerApi.java b/worker/src/main/java/nl/tudelft/ewi/auta/checker/generic/docker/api/DockerApi.java index 5a6c6381d5a095c7ca43744177e4817779962adf..c6cc55cb5ee108cb2ce97b9ef0bec643ccb39c76 100644 --- a/worker/src/main/java/nl/tudelft/ewi/auta/checker/generic/docker/api/DockerApi.java +++ b/worker/src/main/java/nl/tudelft/ewi/auta/checker/generic/docker/api/DockerApi.java @@ -53,6 +53,20 @@ public class DockerApi { return res.get("Id").getAsString(); } + /** + * Creates a new Docker container. + * + * @param name the name of the container + * @param config the container configuration, passed as-is + * + * @return the ID of the container + */ + public String createContainer(final String name, final Map<String, Object> config) { + final var res = this.api.postWithJson("/containers/create?name=" + name, config); + + return res.get("Id").getAsString(); + } + /** * Starts the container. *