Skip to content

Commit 34cfdc8

Browse files
authored
Fix k3s for latest Docker for Mac (cgroupsv2) (#4937)
1 parent 04937b5 commit 34cfdc8

2 files changed

Lines changed: 48 additions & 0 deletions

File tree

modules/k3s/src/main/java/org/testcontainers/k3s/K3sContainer.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import com.fasterxml.jackson.databind.node.TextNode;
77
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
88
import com.github.dockerjava.api.command.InspectContainerResponse;
9+
import com.github.dockerjava.api.model.DockerObjectAccessor;
910
import lombok.SneakyThrows;
1011
import org.testcontainers.containers.BindMode;
1112
import org.testcontainers.containers.GenericContainer;
@@ -25,6 +26,11 @@ public K3sContainer(DockerImageName dockerImageName) {
2526

2627
addExposedPorts(6443, 8443);
2728
setPrivilegedMode(true);
29+
withCreateContainerCmdModifier(it -> {
30+
DockerObjectAccessor.overrideRawValue(
31+
it.getHostConfig(), "CgroupnsMode", "host"
32+
);
33+
});
2834
addFileSystemBind("/sys/fs/cgroup", "/sys/fs/cgroup", BindMode.READ_WRITE);
2935

3036
Map<String, String> tmpFsMapping = new HashMap<>();

modules/k3s/src/test/java/org/testcontainers/k3s/Fabric8K3sContainerTest.java

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,27 @@
11
package org.testcontainers.k3s;
22

3+
import io.fabric8.kubernetes.api.model.ContainerBuilder;
4+
import io.fabric8.kubernetes.api.model.ContainerPortBuilder;
35
import io.fabric8.kubernetes.api.model.Node;
6+
import io.fabric8.kubernetes.api.model.Pod;
7+
import io.fabric8.kubernetes.api.model.PodBuilder;
8+
import io.fabric8.kubernetes.api.model.PodSpec;
9+
import io.fabric8.kubernetes.api.model.PodSpecBuilder;
10+
import io.fabric8.kubernetes.api.model.ProbeBuilder;
411
import io.fabric8.kubernetes.client.Config;
512
import io.fabric8.kubernetes.client.DefaultKubernetesClient;
13+
import io.fabric8.kubernetes.client.dsl.PodResource;
14+
import io.fabric8.kubernetes.client.dsl.Readiable;
615
import lombok.extern.slf4j.Slf4j;
716
import org.assertj.core.api.Assertions;
17+
import org.assertj.core.api.Condition;
818
import org.junit.Test;
919
import org.testcontainers.containers.output.Slf4jLogConsumer;
1020
import org.testcontainers.utility.DockerImageName;
1121

1222
import java.util.List;
23+
import java.util.Map;
24+
import java.util.concurrent.TimeUnit;
1325

1426
@Slf4j
1527
public class Fabric8K3sContainerTest {
@@ -38,6 +50,36 @@ public void shouldStartAndHaveListableNode() {
3850
// }
3951

4052
Assertions.assertThat(nodes).hasSize(1);
53+
54+
// verify that we can start a pod
55+
Pod helloworld = dummyStartablePod();
56+
client.pods().create(helloworld);
57+
client.pods().inNamespace("default").withName("helloworld").waitUntilReady(30, TimeUnit.SECONDS);
58+
59+
Assertions.assertThat(client.pods().inNamespace("default").withName("helloworld"))
60+
.extracting(Readiable::isReady)
61+
.isEqualTo(true);
4162
}
4263
}
64+
65+
private Pod dummyStartablePod() {
66+
PodSpec podSpec = new PodSpecBuilder()
67+
.withContainers(
68+
new ContainerBuilder()
69+
.withName("helloworld")
70+
.withImage("testcontainers/helloworld:1.1.0")
71+
.withPorts(new ContainerPortBuilder().withContainerPort(8080).build())
72+
.withReadinessProbe(new ProbeBuilder().withNewTcpSocket().withNewPort(8080).endTcpSocket().build())
73+
.build()
74+
)
75+
.build();
76+
77+
return new PodBuilder()
78+
.withNewMetadata()
79+
.withName("helloworld")
80+
.withNamespace("default")
81+
.endMetadata()
82+
.withSpec(podSpec)
83+
.build();
84+
}
4385
}

0 commit comments

Comments
 (0)