Skip to content

Commit e8258fd

Browse files
authored
fix(docker): restore python3 in runtime image (#75417)
Signed-off-by: sallyom <somalley@redhat.com>
1 parent f2d97df commit e8258fd

3 files changed

Lines changed: 18 additions & 2 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ Docs: https://docs.openclaw.ai
1111

1212
### Fixes
1313

14+
- Docker: restore `python3` in the gateway runtime image after the slim-runtime switch. Fixes #75041.
1415
- Agents/commitments: keep inferred follow-ups internal when heartbeat target is none, strip raw source text from stored commitments, disable tools during due-commitment heartbeat turns, bound hidden extraction queue growth, expire stale commitments, and add QA/Docker safety coverage. Thanks @vignesh07.
1516
- Telegram/agents: keep typing indicators and optional generation tools off the reply critical path, so fresh Telegram replies no longer stall while provider catalogs and media models load. (#75360) Thanks @obviyus.
1617
- Agents/commitments: run hidden follow-up extraction on the configured agent/default model instead of falling back to direct OpenAI, so OpenAI Codex OAuth-only gateways no longer spam background API-key failures. Fixes #75334. Thanks @sene1337.

Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -167,7 +167,7 @@ RUN --mount=type=cache,id=openclaw-bookworm-apt-cache,target=/var/cache/apt,shar
167167
--mount=type=cache,id=openclaw-bookworm-apt-lists,target=/var/lib/apt,sharing=locked \
168168
apt-get update && \
169169
DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
170-
ca-certificates procps hostname curl git lsof openssl && \
170+
ca-certificates procps hostname curl git lsof openssl python3 && \
171171
update-ca-certificates
172172

173173
RUN chown node:node /app

src/dockerfile.test.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ describe("Dockerfile", () => {
3737
"FROM ${OPENCLAW_NODE_BOOKWORM_SLIM_IMAGE} AS base-runtime",
3838
);
3939
const caInstallIndex = collapsed.indexOf(
40-
"ca-certificates procps hostname curl git lsof openssl",
40+
"ca-certificates procps hostname curl git lsof openssl python3",
4141
);
4242

4343
expect(runtimeIndex).toBeGreaterThan(-1);
@@ -47,6 +47,21 @@ describe("Dockerfile", () => {
4747
expect(collapsed).toContain("update-ca-certificates");
4848
});
4949

50+
it("installs python3 in the slim runtime stage for workspace scripts", async () => {
51+
const dockerfile = collapseDockerContinuations(await readFile(dockerfilePath, "utf8"));
52+
const runtimeIndex = dockerfile.indexOf(
53+
"FROM ${OPENCLAW_NODE_BOOKWORM_SLIM_IMAGE} AS base-runtime",
54+
);
55+
const pythonInstallIndex = dockerfile.indexOf(
56+
"ca-certificates procps hostname curl git lsof openssl python3",
57+
);
58+
59+
expect(runtimeIndex).toBeGreaterThan(-1);
60+
expect(pythonInstallIndex).toBeGreaterThan(runtimeIndex);
61+
expect(pythonInstallIndex).toBeLessThan(dockerfile.indexOf("RUN chown node:node /app"));
62+
expect(dockerfile).toContain("ca-certificates procps hostname curl git lsof openssl python3");
63+
});
64+
5065
it("installs optional browser dependencies after pnpm install", async () => {
5166
const dockerfile = await readFile(dockerfilePath, "utf8");
5267
const installIndex = dockerfile.indexOf("pnpm install --frozen-lockfile");

0 commit comments

Comments
 (0)