from指令本身不支持环境变量或运行时参数,必须通过前置arg声明并配合--build-arg传参实现动态指定基础镜像;arg须在from前且无其他指令,支持默认值和多阶段独立传参。

FROM 指令本身不能直接使用环境变量或运行时参数,必须在构建开始前就确定基础镜像。但可以通过 ARG + --build-arg 组合实现“动态传参”效果——本质是在构建阶段把参数值注入到 FROM 行中。
必须前置声明 ARG
ARG 必须写在 FROM 之前,且前面不能有其他指令(注释除外)。Docker 会按顺序解析,只有先声明的 ARG 才能在紧随其后的 FROM 中被引用。
- 正确写法:先 ARG,再 FROM
- 错误写法:在 ARG 前加 RUN、COPY 或 ENV,会导致 FROM 无法识别该 ARG
- 支持默认值,例如 ARG BASE_IMAGE=alpine,不传参时自动回退
FROM 中直接引用变量
在 FROM 行里用 ${VAR_NAME} 语法拼接镜像名和标签,Docker 构建引擎会在解析时展开为实际镜像地址。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
- 示例:FROM ${BASE_IMAGE}:${BASE_TAG}
- 可拆分使用:单独传镜像名、单独传标签,也支持组合传完整镜像路径(如 ARG FULL_IMAGE=python:3.11-slim → FROM ${FULL_IMAGE})
- 注意:变量名大小写敏感,拼写需与 --build-arg 一致
构建时用 --build-arg 显式传值
执行 docker build 时,通过 --build-arg 把真实值传进去,覆盖 Dockerfile 中的默认值。
- 单参数:docker build --build-arg BASE_IMAGE=ubuntu --build-arg BASE_TAG=22.04 -t myapp .
- 多参数可多次叠加,顺序无关
- 未传参且无默认值 → 构建失败;有默认值 → 自动采用默认值
多阶段构建中各阶段独立传参
每个 FROM 所在阶段都可以有自己的 ARG,互不影响,适合开发/生产差异化构建。
- 构建阶段用 node:18-alpine,运行阶段用 alpine:3.18,各自定义并传参
- 每个阶段的 ARG 都要放在对应 FROM 前面
- 可配合 AS 命名中间阶段,供后续 COPY --from 引用










