This is an automated email from the ASF dual-hosted git repository.
wusheng pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/skywalking.git
The following commit(s) were added to refs/heads/master by this push:
new 88ca648759 Fix CI E2E failures caused by Docker 29 on GitHub Actions
runners (#13706)
88ca648759 is described below
commit 88ca64875914613014cb0e99845d7a02b874a680
Author: 吴晟 Wu Sheng <[email protected]>
AuthorDate: Sat Feb 21 17:17:30 2026 +0800
Fix CI E2E failures caused by Docker 29 on GitHub Actions runners (#13706)
GitHub Actions runners upgraded to Docker 29, which enables containerd
image store by default. This causes two problems:
1. **containerd v2.1.5 lowered the default file descriptor limit** from
1,048,576 to 1,024, causing applications like Elasticsearch to crash
immediately at startup (ES requires at least 65,536).
2. **Docker 29 raised the minimum API version to 1.44**, while the current
`skywalking-infra-e2e` tool uses Docker SDK API v1.41, causing `client version
1.41 is too old` errors.
This PR fixes both issues by:
- Disabling the containerd image store (`containerd-snapshotter: false`) in
all Docker-related CI jobs, restoring the classic overlay2 storage driver and
its default ulimits.
- Exporting `DOCKER_API_VERSION` from the server's supported version so the
Docker SDK client negotiates correctly after restart.
Affected jobs: `docker` (image build), `e2e-test`, `e2e-test-istio`,
`e2e-test-istio-ambient`, `e2e-test-java-versions`.
---
.github/workflows/skywalking.yaml | 80 +++++++++++++++++++++++++++++++++++++++
1 file changed, 80 insertions(+)
diff --git a/.github/workflows/skywalking.yaml
b/.github/workflows/skywalking.yaml
index 695b18f50b..0a3813dcc3 100644
--- a/.github/workflows/skywalking.yaml
+++ b/.github/workflows/skywalking.yaml
@@ -204,6 +204,22 @@ jobs:
with:
submodules: true
persist-credentials: false
+ - name: Disable containerd image store
+ shell: bash
+ run: |
+ DAEMON_JSON="/etc/docker/daemon.json"
+ if [ -f "$DAEMON_JSON" ]; then
+ sudo jq '. + {"features": {"containerd-snapshotter": false}}'
"$DAEMON_JSON" \
+ | sudo tee "${DAEMON_JSON}.tmp" > /dev/null
+ sudo mv "${DAEMON_JSON}.tmp" "$DAEMON_JSON"
+ else
+ echo '{"features": {"containerd-snapshotter": false}}' \
+ | sudo tee "$DAEMON_JSON" > /dev/null
+ fi
+ sudo systemctl restart docker
+ docker version
+ docker info
+ echo "DOCKER_API_VERSION=$(docker version --format
'{{.Server.APIVersion}}')" >> "$GITHUB_ENV"
- uses: actions/download-artifact@v4
name: Download distribution tar
with:
@@ -739,6 +755,22 @@ jobs:
with:
submodules: true
persist-credentials: false
+ - name: Disable containerd image store
+ shell: bash
+ run: |
+ DAEMON_JSON="/etc/docker/daemon.json"
+ if [ -f "$DAEMON_JSON" ]; then
+ sudo jq '. + {"features": {"containerd-snapshotter": false}}'
"$DAEMON_JSON" \
+ | sudo tee "${DAEMON_JSON}.tmp" > /dev/null
+ sudo mv "${DAEMON_JSON}.tmp" "$DAEMON_JSON"
+ else
+ echo '{"features": {"containerd-snapshotter": false}}' \
+ | sudo tee "$DAEMON_JSON" > /dev/null
+ fi
+ sudo systemctl restart docker
+ docker version
+ docker info
+ echo "DOCKER_API_VERSION=$(docker version --format
'{{.Server.APIVersion}}')" >> "$GITHUB_ENV"
- run: grep -v '^#' test/e2e-v2/script/env >> "$GITHUB_ENV"
- uses: apache/skywalking-cli/actions/setup@master
with:
@@ -823,6 +855,22 @@ jobs:
with:
submodules: true
persist-credentials: false
+ - name: Disable containerd image store
+ shell: bash
+ run: |
+ DAEMON_JSON="/etc/docker/daemon.json"
+ if [ -f "$DAEMON_JSON" ]; then
+ sudo jq '. + {"features": {"containerd-snapshotter": false}}'
"$DAEMON_JSON" \
+ | sudo tee "${DAEMON_JSON}.tmp" > /dev/null
+ sudo mv "${DAEMON_JSON}.tmp" "$DAEMON_JSON"
+ else
+ echo '{"features": {"containerd-snapshotter": false}}' \
+ | sudo tee "$DAEMON_JSON" > /dev/null
+ fi
+ sudo systemctl restart docker
+ docker version
+ docker info
+ echo "DOCKER_API_VERSION=$(docker version --format
'{{.Server.APIVersion}}')" >> "$GITHUB_ENV"
- run: grep -v '^#' test/e2e-v2/script/env >> "$GITHUB_ENV"
- uses: apache/skywalking-cli/actions/setup@master
with:
@@ -884,6 +932,22 @@ jobs:
with:
submodules: true
persist-credentials: false
+ - name: Disable containerd image store
+ shell: bash
+ run: |
+ DAEMON_JSON="/etc/docker/daemon.json"
+ if [ -f "$DAEMON_JSON" ]; then
+ sudo jq '. + {"features": {"containerd-snapshotter": false}}'
"$DAEMON_JSON" \
+ | sudo tee "${DAEMON_JSON}.tmp" > /dev/null
+ sudo mv "${DAEMON_JSON}.tmp" "$DAEMON_JSON"
+ else
+ echo '{"features": {"containerd-snapshotter": false}}' \
+ | sudo tee "$DAEMON_JSON" > /dev/null
+ fi
+ sudo systemctl restart docker
+ docker version
+ docker info
+ echo "DOCKER_API_VERSION=$(docker version --format
'{{.Server.APIVersion}}')" >> "$GITHUB_ENV"
- run: grep -v '^#' test/e2e-v2/script/env >> "$GITHUB_ENV"
- uses: apache/skywalking-cli/actions/setup@master
with:
@@ -940,6 +1004,22 @@ jobs:
with:
submodules: true
persist-credentials: false
+ - name: Disable containerd image store
+ shell: bash
+ run: |
+ DAEMON_JSON="/etc/docker/daemon.json"
+ if [ -f "$DAEMON_JSON" ]; then
+ sudo jq '. + {"features": {"containerd-snapshotter": false}}'
"$DAEMON_JSON" \
+ | sudo tee "${DAEMON_JSON}.tmp" > /dev/null
+ sudo mv "${DAEMON_JSON}.tmp" "$DAEMON_JSON"
+ else
+ echo '{"features": {"containerd-snapshotter": false}}' \
+ | sudo tee "$DAEMON_JSON" > /dev/null
+ fi
+ sudo systemctl restart docker
+ docker version
+ docker info
+ echo "DOCKER_API_VERSION=$(docker version --format
'{{.Server.APIVersion}}')" >> "$GITHUB_ENV"
- run: grep -v '^#' test/e2e-v2/script/env >> "$GITHUB_ENV"
- uses: apache/skywalking-cli/actions/setup@master
with: