Skip to content

Commit 545dbbd

Browse files
Adding azure-linux OS support for docker-in-docker feature (#1506)
* Adding azure-linux OS support for docker-in-docker feature * test * Fixing issues and adding mariner * Fixing if * simplified code * addressing review comments
1 parent f7cc77b commit 545dbbd

File tree

7 files changed

+682
-79
lines changed

7 files changed

+682
-79
lines changed

src/docker-in-docker/devcontainer-feature.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"id": "docker-in-docker",
3-
"version": "2.12.4",
3+
"version": "2.13.0",
44
"name": "Docker (Docker-in-Docker)",
55
"documentationURL": "https://github.com/devcontainers/features/tree/main/src/docker-in-docker",
66
"description": "Create child containers *inside* a container, independent from the host's docker instance. Installs Docker extension in the container along with needed CLIs.",

src/docker-in-docker/install.sh

Lines changed: 435 additions & 78 deletions
Large diffs are not rendered by default.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
set -e
3+
4+
# Optional: Import test library
5+
source dev-container-features-test-lib
6+
7+
# OS identification (optional, can fail gracefully)
8+
check "azure os detection" bash -c "cat /etc/os-release | grep -i azure || echo 'Not Azure Linux, but test can continue'"
9+
10+
# Core Docker functionality
11+
check "docker version" docker --version
12+
check "docker daemon running" docker info
13+
14+
# Docker init script (if using docker-in-docker feature)
15+
check "docker init script exists" test -f "/usr/local/share/docker-init.sh"
16+
17+
# Basic functionality test
18+
check "docker container test" docker run --rm alpine echo "test successful"
19+
20+
# The main Azure Linux specific test - DNS flag should NOT be present
21+
check "dns flag should not be present" test ! "$(ps -ax | grep -v grep | grep -E 'dockerd.+\-\-dns')"
22+
23+
# Report result
24+
reportResults
Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# Optional: Import test library
6+
source dev-container-features-test-lib
7+
8+
echo "=== Azure Linux Docker CE Test ==="
9+
10+
echo "1. Verifying OS identification..."
11+
cat /etc/os-release | grep -i azure
12+
13+
echo "2. Checking Docker installation..."
14+
docker --version || {
15+
echo "ERROR: Docker is not installed"
16+
exit 1
17+
}
18+
19+
echo "3. Checking if Docker binaries exist..."
20+
which dockerd || echo "dockerd not in PATH"
21+
ls -la /usr/bin/docker* || echo "No docker binaries in /usr/bin"
22+
ls -la /usr/local/bin/docker* || echo "No docker binaries in /usr/local/bin"
23+
24+
echo "4. Checking Docker service files..."
25+
ls -la /etc/systemd/system/docker* || echo "No systemd docker files"
26+
ls -la /usr/lib/systemd/system/docker* || echo "No system docker service files"
27+
28+
echo "6. Checking Docker daemon status..."
29+
if ! docker info >/dev/null 2>&1; then
30+
echo "Docker daemon not running, starting it..."
31+
32+
# Check if docker-init script exists
33+
if [ -f "/usr/local/share/docker-init.sh" ]; then
34+
echo "Starting Docker using docker-init.sh..."
35+
36+
# Clear any existing log
37+
rm -f /tmp/dockerd.log
38+
39+
# Start docker-init in background
40+
nohup /usr/local/share/docker-init.sh > /tmp/docker-init.log 2>&1 &
41+
42+
# Wait for Docker to start with better debugging
43+
echo "Waiting for Docker daemon to start..."
44+
for i in {1..30}; do
45+
if docker info >/dev/null 2>&1; then
46+
echo "Docker daemon started successfully"
47+
break
48+
fi
49+
echo "Waiting... ($i/30)"
50+
51+
# Show dockerd logs if available
52+
if [ -f "/tmp/dockerd.log" ]; then
53+
echo "--- Recent dockerd.log entries ---"
54+
tail -5 /tmp/dockerd.log || echo "Could not read dockerd.log"
55+
echo "--- End of dockerd.log ---"
56+
fi
57+
58+
sleep 2
59+
done
60+
61+
# Final check with detailed error reporting
62+
if ! docker info >/dev/null 2>&1; then
63+
echo "ERROR: Docker daemon failed to start after 60 seconds"
64+
echo ""
65+
echo "=== DEBUGGING INFORMATION ==="
66+
echo ""
67+
echo "1. Docker init log:"
68+
cat /tmp/docker-init.log 2>/dev/null || echo "No docker-init.log found"
69+
echo ""
70+
echo "2. Docker daemon log:"
71+
cat /tmp/dockerd.log 2>/dev/null || echo "No dockerd.log found"
72+
echo ""
73+
echo "3. Process list:"
74+
ps aux | grep -E "(docker|containerd)" | grep -v grep || echo "No docker/containerd processes found"
75+
echo ""
76+
echo "4. Network interfaces:"
77+
ip addr show || ifconfig || echo "Could not get network info"
78+
echo ""
79+
echo "5. Mount points:"
80+
mount | grep -E "(docker|container)" || echo "No docker-related mounts"
81+
echo ""
82+
echo "6. SELinux status:"
83+
if command -v getenforce >/dev/null 2>&1; then
84+
getenforce || echo "SELinux command failed"
85+
else
86+
echo "SELinux tools not available"
87+
fi
88+
echo ""
89+
echo "7. Available storage:"
90+
df -h /var/lib/docker 2>/dev/null || df -h / || echo "Could not check storage"
91+
echo ""
92+
echo "8. System resources:"
93+
free -h || echo "Could not check memory"
94+
echo ""
95+
echo "=== END DEBUGGING ==="
96+
exit 1
97+
fi
98+
else
99+
echo "ERROR: docker-init.sh not found at /usr/local/share/docker-init.sh"
100+
ls -la /usr/local/share/ || echo "Could not list /usr/local/share/"
101+
exit 1
102+
fi
103+
else
104+
echo "Docker daemon is already running"
105+
fi
106+
107+
echo "7. Testing basic Docker functionality..."
108+
docker info | head -10
109+
110+
echo "8. Testing container execution..."
111+
docker run --rm alpine echo "Basic container test successful"
112+
113+
echo "=== Docker CE test completed successfully ==="
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
#!/bin/bash
2+
# Simple test script for cbl_mariner scenario (Moby = true)
3+
# Run with: sudo bash script_cbl_mariner.sh
4+
5+
set -e
6+
7+
echo "=== Testing cbl_mariner scenario (Moby) ==="
8+
9+
# Set environment variables for the scenario
10+
export VERSION="latest"
11+
export MOBY="true"
12+
export AZUREDNSAUTODETECTION="false"
13+
14+
# Source OS info
15+
. /etc/os-release
16+
echo "OS: $ID $VERSION_ID"
17+
18+
# Check package manager
19+
if type tdnf > /dev/null 2>&1; then
20+
echo "Using tdnf"
21+
else
22+
echo "ERROR: tdnf not found"
23+
exit 1
24+
fi
25+
26+
# Validate
27+
if command -v docker > /dev/null 2>&1; then
28+
docker --version
29+
echo "SUCCESS: Docker installed"
30+
else
31+
echo "ERROR: Docker not installed"
32+
exit 1
33+
fi
34+
35+
echo "=== cbl_mariner test passed ==="
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#!/bin/bash
2+
# test script for cbl_mariner_docker_ce scenario (Moby = false)
3+
4+
set -e
5+
6+
echo "=== Testing cbl_mariner_docker_ce scenario (Docker CE) ==="
7+
8+
# Set environment variables for the scenario
9+
export VERSION="latest"
10+
export MOBY="false"
11+
export AZUREDNSAUTODETECTION="false"
12+
13+
# Source OS info
14+
. /etc/os-release
15+
echo "OS: $ID $VERSION_ID"
16+
17+
# Check package manager
18+
if type tdnf > /dev/null 2>&1; then
19+
echo "Using tdnf"
20+
else
21+
echo "ERROR: tdnf not found"
22+
exit 1
23+
fi
24+
25+
# Validate
26+
if command -v docker > /dev/null 2>&1; then
27+
docker --version
28+
echo "SUCCESS: Docker installed"
29+
else
30+
echo "ERROR: Docker not installed"
31+
exit 1
32+
fi
33+
34+
echo "=== cbl_mariner_docker_ce test passed ==="

test/docker-in-docker/scenarios.json

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -177,5 +177,45 @@
177177
},
178178
"remoteUser": "vscode",
179179
"onCreateCommand": "docker ps && sleep 5s && docker ps"
180+
},
181+
"azure_linux": {
182+
"image": "mcr.microsoft.com/azurelinux/base/core:3.0",
183+
"features": {
184+
"docker-in-docker": {
185+
"version": "latest",
186+
"moby": "true",
187+
"azureDnsAutoDetection": false
188+
}
189+
}
190+
},
191+
"azure_linux_docker_ce": {
192+
"image": "mcr.microsoft.com/azurelinux/base/core:3.0",
193+
"features": {
194+
"docker-in-docker": {
195+
"version": "latest",
196+
"moby": "false",
197+
"azureDnsAutoDetection": false
198+
}
199+
}
200+
},
201+
"cbl_mariner": {
202+
"image": "mcr.microsoft.com/cbl-mariner/base/core:2.0",
203+
"features": {
204+
"docker-in-docker": {
205+
"version": "latest",
206+
"moby": "true",
207+
"azureDnsAutoDetection": false
208+
}
209+
}
210+
},
211+
"cbl_mariner_docker_ce": {
212+
"image": "mcr.microsoft.com/cbl-mariner/base/core:2.0",
213+
"features": {
214+
"docker-in-docker": {
215+
"version": "latest",
216+
"moby": "false",
217+
"azureDnsAutoDetection": false
218+
}
219+
}
180220
}
181221
}

0 commit comments

Comments
 (0)