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.
      *