WORKDIR 指令用于持久设置容器默认工作目录,必须用绝对路径,自动创建目录,支持环境变量,可多次覆盖,影响后续所有指令执行上下文。
在 dockerfile 中,用 workdir 指令就能直接设定容器启动后默认进入的目录。它不是临时切换,而是持久生效的路径配置,影响后续所有 run、cmd、entrypoint、copy 和 add 指令的执行上下文。
基本写法与规则
WORKDIR 必须使用绝对路径(如 /app、/usr/src/app),不能写成 app 或 ./app 这样的相对形式(除非前一个 WORKDIR 已存在,且你明确依赖其层级关系)。
- Docker 会自动创建该路径,即使它原本不存在
- 一个 Dockerfile 中可以多次使用 WORKDIR,后一次会覆盖前一次的路径
- 支持环境变量展开,例如:
ENV APP_HOME=/opt/myapp→WORKDIR $APP_HOME
典型示例
以 Node.js 应用为例:
FROM node:18 WORKDIR /usr/src/app COPY package*.json ./ RUN npm install COPY . . CMD ["node", "index.js"]
构建并运行容器后,docker exec -it container_name pwd 输出就是 /usr/src/app —— 所有文件操作和命令都以此为基准。
在 Linux 上通过 Docker 运行 OpenClaw,并使用 Tailscale 实现远程访问。⚠️ 涉及 sudo、Docker、Tailscale和凭证挂载——请先查阅安全章节...
常见误区提醒
别再用 RUN cd /app && ... 替代 WORKDIR。因为每个 RUN 是独立层,cd 的效果不会延续到下一层。
- 错误写法:
RUN cd /app && npm install→ 安装实际发生在根目录,/app 下没有 node_modules - 正确写法:
WORKDIR /app+RUN npm install→ npm 命令自然落在 /app 目录中
验证是否生效
构建镜像后,可快速验证 WORKDIR 是否按预期设置:
- 运行容器:
docker run -d --name test-app your-image - 检查工作目录:
docker exec test-app pwd - 或查看镜像元数据:
docker inspect your-image | jq '.[0].Config.WorkingDir'

















