diff --git a/BUILD b/BUILD
index 900a009..07bf406 100644
--- a/BUILD
+++ b/BUILD
@@ -21,6 +21,7 @@
     "@javax_inject//jar",
     "@aopalliance//jar",
     "@slf4j-api//jar",
+    "@slf4j-ext//jar",
     "@log4j-slf4j-impl//jar",
     "@log4j-api//jar",
     "@log4j-core//jar",
@@ -72,7 +73,10 @@
     name = "gc_conductor_tests",
     srcs = glob(["src/test/java/**/*.java"]),
     resources = glob(["src/test/resources/**/*"]),
-    tags = ["gc-conductor"],
+    tags = [
+        "docker",
+        "gc-conductor",
+    ],
     deps = [
         ":gc-conductor__plugin_test_deps",
     ],
@@ -86,7 +90,14 @@
         ":gc-conductor__plugin",
         ":gc-executor_lib",
         "@byte-buddy//jar",
+        "@duct_tape//jar",
+        "@jna//jar",
         "@mockito//jar",
         "@objenesis//jar",
+        "@testcontainers-database-commons//jar",
+        "@testcontainers-jdbc//jar",
+        "@testcontainers-postgres//jar",
+        "@testcontainers//jar",
+        "@visible_assertions//jar",
     ],
 )
diff --git a/external_plugin_deps.bzl b/external_plugin_deps.bzl
index 561ca67..6b302c5 100644
--- a/external_plugin_deps.bzl
+++ b/external_plugin_deps.bzl
@@ -27,17 +27,31 @@
     )
 
     maven_jar(
+        name = "duct_tape",
+        artifact = "org.rnorth.duct-tape:duct-tape:1.0.7",
+        sha1 = "a26b5d90d88c91321dc7a3734ea72d2fc019ebb6",
+    )
+
+    maven_jar(
         name = "objenesis",
         artifact = "org.objenesis:objenesis:2.6",
         sha1 = "639033469776fd37c08358c6b92a4761feb2af4b",
     )
 
+    SLF4J_VERS = "1.7.25"
+
     maven_jar(
         name = "slf4j-api",
-        artifact = "org.slf4j:slf4j-api:1.7.25",
+        artifact = "org.slf4j:slf4j-api:" + SLF4J_VERS,
         sha1 = "da76ca59f6a57ee3102f8f9bd9cee742973efa8a",
     )
 
+    maven_jar(
+        name = "slf4j-ext",
+        artifact = "org.slf4j:slf4j-ext:" + SLF4J_VERS,
+        sha1 = "d1685f86e2becda32ad8bb823b8cc4990eb45f69",
+    )
+
     LOG4J2_VERS = "2.11.1"
 
     maven_jar(
@@ -126,3 +140,41 @@
         artifact = "tech.huffman.re-retrying:re-retrying:3.0.0",
         sha1 = "bd3ce1aaafc0f357354e76890f0a8199a0f42f3a",
     )
+
+    maven_jar(
+        name = "visible_assertions",
+        artifact = "org.rnorth.visible-assertions:visible-assertions:2.1.0",
+        sha1 = "f2fcff2862860828ac38a5e1f14d941787c06b13",
+    )
+
+    maven_jar(
+        name = "jna",
+        artifact = "net.java.dev.jna:jna:4.5.1",
+        sha1 = "65bd0cacc9c79a21c6ed8e9f588577cd3c2f85b9",
+    )
+
+    TEST_CONTAINERS_VERS = "1.10.6"
+
+    maven_jar(
+        name = "testcontainers",
+        artifact = "org.testcontainers:testcontainers:" + TEST_CONTAINERS_VERS,
+        sha1 = "435c94ec099e229e62295cec4feec91c192aa764",
+    )
+
+    maven_jar(
+        name = "testcontainers-database-commons",
+        artifact = "org.testcontainers:database-commons:" + TEST_CONTAINERS_VERS,
+        sha1 = "36b1a0f88358b433c1d10d74829d4180ca9cb2ec",
+    )
+
+    maven_jar(
+        name = "testcontainers-jdbc",
+        artifact = "org.testcontainers:jdbc:" + TEST_CONTAINERS_VERS,
+        sha1 = "449d18d09dc8d04f9c90b0bdc1930afdf4558a7e",
+    )
+
+    maven_jar(
+        name = "testcontainers-postgres",
+        artifact = "org.testcontainers:postgresql:" + TEST_CONTAINERS_VERS,
+        sha1 = "a73d73b200b60da821745acca2785874ae65e5b9",
+    )
diff --git a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresModule.java b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresModule.java
index 24ceba9..f240315 100644
--- a/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresModule.java
+++ b/src/main/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresModule.java
@@ -15,7 +15,6 @@
 package com.ericsson.gerrit.plugins.gcconductor.postgresqueue;
 
 import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.DRIVER;
-import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.INITIAL_DATABASE;
 import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.createDatabase;
 import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.databaseExists;
 import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.executeStatement;
@@ -64,7 +63,7 @@
   @Provides
   @Singleton
   BasicDataSource provideGcDatabaseAccess(CommonConfig cfg) throws SQLException {
-    BasicDataSource adminDataSource = createDataSource(cfg, INITIAL_DATABASE);
+    BasicDataSource adminDataSource = createDataSource(cfg);
     try (Connection conn = adminDataSource.getConnection();
         Statement stat = conn.createStatement();
         ResultSet resultSet = stat.executeQuery(databaseExists(cfg.getDatabaseName()))) {
@@ -74,13 +73,13 @@
     } finally {
       adminDataSource.close();
     }
-    return createDataSource(cfg, cfg.getDatabaseName());
+    return createDataSource(cfg);
   }
 
-  private static BasicDataSource createDataSource(CommonConfig cfg, String database) {
+  private static BasicDataSource createDataSource(CommonConfig cfg) {
     BasicDataSource ds = new BasicDataSource();
     ds.setDriverClassName(DRIVER);
-    ds.setUrl(cfg.getDatabaseUrl() + database + cfg.getDatabaseUrlOptions());
+    ds.setUrl(cfg.getDatabaseUrl() + cfg.getDatabaseName() + cfg.getDatabaseUrlOptions());
     ds.setUsername(cfg.getUsername());
     ds.setPassword(cfg.getPassword());
     ds.setMinEvictableIdleTimeMillis(EVICT_IDLE_TIME_MS);
diff --git a/src/main/resources/Documentation/build.md b/src/main/resources/Documentation/build.md
index e6e9ec1..0e9b94a 100644
--- a/src/main/resources/Documentation/build.md
+++ b/src/main/resources/Documentation/build.md
@@ -9,6 +9,12 @@
 Standalone build mode is recommended, as this mode doesn't require local Gerrit
 tree to exist.
 
+Successfully running some of the tests requires Docker,
+which are skipped if Docker is not available.
+
+Bazel currently does not show
+link:https://github.com/bazelbuild/bazel/issues/3476[skipped tests].
+
 ## Build standalone
 
 To build the plugin, issue the following command:
diff --git a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresModuleTest.java b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresModuleTest.java
index fa2593f..cb177c2 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresModuleTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresModuleTest.java
@@ -15,7 +15,7 @@
 package com.ericsson.gerrit.plugins.gcconductor.postgresqueue;
 
 import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.TestUtil.configMockFor;
-import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.TestUtil.deleteDatabase;
+import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.TestUtil.invalidConfigMockFor;
 import static com.google.common.truth.Truth.assertThat;
 import static org.mockito.Mockito.doThrow;
 import static org.mockito.Mockito.mock;
@@ -26,18 +26,27 @@
 import org.apache.commons.dbcp.BasicDataSource;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
+import org.testcontainers.containers.PostgreSQLContainer;
 
 public class PostgresModuleTest {
 
-  private static final String TEST_DATABASE_NAME = "gc_test_module";
   private EvaluatorConfig configMock;
   private PostgresModule module;
   private BasicDataSource dataSource;
 
+  private static PostgreSQLContainer<?> container;
+
+  @BeforeClass
+  public static void startPostgres() {
+    container = new PostgreSQLContainer<>();
+    container.start();
+  }
+
   @Before
   public void setUp() throws SQLException {
-    configMock = configMockFor(TEST_DATABASE_NAME);
+    configMock = configMockFor(container);
     module = new PostgresModule(null);
     dataSource = module.provideGcDatabaseAccess(configMock);
   }
@@ -47,7 +56,6 @@
     if (dataSource != null) {
       dataSource.close();
     }
-    deleteDatabase(TEST_DATABASE_NAME);
   }
 
   @Test
@@ -66,7 +74,7 @@
 
   @Test(expected = SQLException.class)
   public void shouldFailIfDatabaseNameIsInvalid() throws SQLException {
-    module.provideGcDatabaseAccess(configMockFor("invalid!@#$@$%^-name"));
+    module.provideGcDatabaseAccess(invalidConfigMockFor(container));
   }
 
   @Test
diff --git a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueueTest.java b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueueTest.java
index ffa452b..50e769c 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueueTest.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/PostgresQueueTest.java
@@ -15,8 +15,8 @@
 package com.ericsson.gerrit.plugins.gcconductor.postgresqueue;
 
 import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.TestUtil.configMockFor;
-import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.TestUtil.deleteDatabase;
 import static com.google.common.truth.Truth.assertThat;
+import static org.junit.Assert.fail;
 import static org.mockito.ArgumentMatchers.anyString;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
@@ -33,19 +33,28 @@
 import org.apache.commons.dbcp.BasicDataSource;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.BeforeClass;
 import org.junit.Test;
+import org.testcontainers.containers.PostgreSQLContainer;
 
 public class PostgresQueueTest {
 
-  private static final String TEST_DATABASE_NAME = "gc_test_queue";
   private BasicDataSource dataSource;
   private PostgresQueue queue;
 
+  private static PostgreSQLContainer<?> container;
+
+  @BeforeClass
+  public static void startPostgres() {
+    container = new PostgreSQLContainer<>();
+    container.start();
+  }
+
   @Before
-  public void setUp() throws SQLException {
-    dataSource =
-        new PostgresModule(null).provideGcDatabaseAccess(configMockFor(TEST_DATABASE_NAME));
+  public void setUp() throws SQLException, GcQueueException {
+    dataSource = new PostgresModule(null).provideGcDatabaseAccess(configMockFor(container));
     queue = new PostgresQueue(dataSource);
+    emptyQueue();
   }
 
   @After
@@ -53,7 +62,6 @@
     if (dataSource != null) {
       dataSource.close();
     }
-    deleteDatabase(TEST_DATABASE_NAME);
   }
 
   @Test
@@ -496,4 +504,20 @@
 
     return dataSouceMock;
   }
+
+  private void emptyQueue() throws GcQueueException {
+    queue
+        .list()
+        .stream()
+        .map(RepositoryInfo::getPath)
+        .forEach(
+            repository -> {
+              try {
+                queue.remove(repository);
+              } catch (GcQueueException e) {
+                fail();
+              }
+            });
+    assertThat(queue.list()).isEmpty();
+  }
 }
diff --git a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/TestUtil.java b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/TestUtil.java
index d45237a..a90f0f4 100644
--- a/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/TestUtil.java
+++ b/src/test/java/com/ericsson/gerrit/plugins/gcconductor/postgresqueue/TestUtil.java
@@ -14,44 +14,34 @@
 
 package com.ericsson.gerrit.plugins.gcconductor.postgresqueue;
 
-import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.DRIVER;
-import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.INITIAL_DATABASE;
-import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.dropDatabase;
-import static com.ericsson.gerrit.plugins.gcconductor.postgresqueue.DatabaseConstants.executeStatement;
 import static org.mockito.Mockito.mock;
 import static org.mockito.Mockito.when;
 
 import com.ericsson.gerrit.plugins.gcconductor.evaluator.EvaluatorConfig;
-import java.sql.SQLException;
-import org.apache.commons.dbcp.BasicDataSource;
 import org.junit.Ignore;
+import org.testcontainers.containers.PostgreSQLContainer;
 
 @Ignore
 public class TestUtil {
 
-  private static final String DATABASE_SERVER_URL = "jdbc:postgresql://localhost:5432/";
-  private static final String DEFAULT_USER_AND_PASSWORD = "gc";
-
-  static EvaluatorConfig configMockFor(String databaseName) {
+  static EvaluatorConfig configMockFor(PostgreSQLContainer<?> container) {
     EvaluatorConfig configMock = mock(EvaluatorConfig.class);
-    when(configMock.getDatabaseUrl()).thenReturn(DATABASE_SERVER_URL);
+    when(configMock.getDatabaseUrl()).thenReturn(urlWithoutDatabase(container));
     when(configMock.getDatabaseUrlOptions()).thenReturn("");
-    when(configMock.getDatabaseName()).thenReturn(databaseName);
-    when(configMock.getUsername()).thenReturn(DEFAULT_USER_AND_PASSWORD);
-    when(configMock.getPassword()).thenReturn(DEFAULT_USER_AND_PASSWORD);
+    when(configMock.getDatabaseName()).thenReturn(container.getDatabaseName());
+    when(configMock.getUsername()).thenReturn(container.getUsername());
+    when(configMock.getPassword()).thenReturn(container.getPassword());
     return configMock;
   }
 
-  static void deleteDatabase(String databaseName) throws SQLException {
-    BasicDataSource ds = new BasicDataSource();
-    try {
-      ds.setDriverClassName(DRIVER);
-      ds.setUrl(DATABASE_SERVER_URL + INITIAL_DATABASE);
-      ds.setUsername(DEFAULT_USER_AND_PASSWORD);
-      ds.setPassword(DEFAULT_USER_AND_PASSWORD);
-      executeStatement(ds, dropDatabase(databaseName));
-    } finally {
-      ds.close();
-    }
+  static EvaluatorConfig invalidConfigMockFor(PostgreSQLContainer<?> container) {
+    EvaluatorConfig configMock = configMockFor(container);
+    when(configMock.getDatabaseName()).thenReturn(container.getDatabaseName() + "not");
+    return configMock;
+  }
+
+  private static String urlWithoutDatabase(PostgreSQLContainer<?> container) {
+    String urlWithDatabase = container.getJdbcUrl();
+    return urlWithDatabase.substring(0, urlWithDatabase.lastIndexOf('/') + 1);
   }
 }
diff --git a/src/test/resources/log4j2.xml b/src/test/resources/log4j2.xml
new file mode 100644
index 0000000..7ee8d38
--- /dev/null
+++ b/src/test/resources/log4j2.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<Configuration status="WARN" shutdownHook="disable">
+	<Properties>
+		<Property name="log.path">opt/gerrit/review_site/logs/gc</Property>
+	</Properties>
+	<Appenders>
+		<RollingFile name="RollingFile" fileName="${log.path}/gc.log"
+			filePattern="${log.path}/gc.log.%d{yyyy-MM-dd}.gz"
+			ignoreExceptions="false">
+			<PatternLayout
+				pattern="%d{yyy-MM-dd HH:mm:ss.SSS} %-5level %logger{1} - %t - %msg%n" />
+			<Policies>
+				<TimeBasedTriggeringPolicy interval="1" modulate="true" />
+				<SizeBasedTriggeringPolicy size="30 MB" />
+			</Policies>
+		</RollingFile>
+	</Appenders>
+	<Loggers>
+		<Logger name="com.ericsson.gerrit.plugins.gcconductor" level="info" />
+		<Root level="error">
+			<AppenderRef ref="RollingFile" />
+		</Root>
+	</Loggers>
+</Configuration>
\ No newline at end of file
