WORKDIR 支持自动级联创建多层绝对路径目录,如 /a/b/c/d 会依次创建所有父目录,无需手动 mkdir -p;相对路径行为不可靠,推荐统一使用绝对路径。

WORKDIR 指令本身不支持“级联创建”这个说法,但它能自动创建不存在的多层目录路径——只要指定的是完整绝对路径,Docker 构建时会逐级创建所有中间父目录。
WORKDIR 会自动创建完整路径
Docker 在执行 WORKDIR /a/b/c/d 时,会像 Linux 的 mkdir -p 一样,依次创建 /a、/a/b、/a/b/c,最后进入 /a/b/c/d。不需要提前用 RUN mkdir -p 手动铺路。
- 路径必须是绝对路径(以 / 开头),相对路径行为不可靠
- 如果上层目录因权限或只读限制无法创建,构建会失败
- 后续的 COPY、RUN、CMD 等指令都以该路径为当前工作目录
常见写法对比
✅ 推荐:单条 WORKDIR 直接写目标路径
WORKDIR /opt/myapp/src
构建时自动创建 /opt → /opt/myapp → /opt/myapp/src
❌ 不必要:拆成多条 WORKDIR
WORKDIR /opt WORKDIR myapp WORKDIR src
虽然语法合法,但易出错(比如第二行用相对路径时依赖前一条是否成功)、可读性差、无实际优势
配合 COPY 的典型用法
路径深度常服务于项目结构。例如前端项目:
FROM node:18-alpine WORKDIR /app/client # 自动创建 /app 和 /app/client COPY package.json ./ RUN npm ci --only=production COPY . . CMD ["npm", "start"]
所有文件被复制到 /app/client,且 npm 命令也在该目录下执行
注意路径继承与覆盖
一个 Dockerfile 中可以多次使用 WORKDIR,每次都会切换并创建新路径,后设的会覆盖前设的:
WORKDIR /srv WORKDIR logs # 此时工作目录是 /srv/logs(相对路径基于上一个 WORKDIR) WORKDIR /tmp/data # 此时工作目录变成 /tmp/data(绝对路径,完全重置)
建议统一用绝对路径,避免嵌套逻辑混乱

















