首页/云/Docker 容器速查/WORKDIR 设置工作目录
镜像与构建107 条

WORKDIR 设置工作目录

为后续 RUN/COPY/CMD/ENTRYPOINT 设定工作目录,目录不存在会自动创建;相对路径基于上一条 WORKDIR 解析。

Docker 容器速查云更新于 2026-10-13

WORKDIR 是什么

设定后续指令与容器启动进程的工作目录。目录不存在时会自动创建(含多级)。它解决的是相对路径的基准问题:不设定时每条指令都在根目录或基础镜像指定的目录执行,写出来的文件位置往往不是预期的。

基本信息

作用设定构建期与运行期的初始工作目录
写法可写绝对路径,也可写相对上一条的相对路径
自动创建目录不存在时自动创建,含多级父目录
影响范围其后的构建指令与容器启动进程都受影响
运行时覆盖可在启动命令里指定工作目录覆盖镜像里的设定

典型使用场景

  • 应用目录约定:把工作目录设为应用根目录,后续相对路径都基于它
  • 分阶段构建:编译阶段与运行阶段各自设定目录,互不干扰
  • 脚本执行基准:让启动脚本里的相对路径落在配置与数据目录预期位置
  • 多服务镜像:不同服务目录分别设定,减少互相影响
  • 排查路径问题:明确工作目录后,启动即报找不到文件的问题大幅减少

常用示例

常用示例
WORKDIR /app                      # 设定应用根目录,不存在会自动创建
COPY package.json ./              # 相对工作目录复制
RUN npm ci --omit=dev
COPY . .
WORKDIR /app/config               # 再切一层目录
CMD ["node", "server.js"]         # 启动进程的初始目录为最后设定的值
# docker run -w /app app/web:1.0  # 运行时覆盖

常见路径问题与原因

现象原因处理
启动报找不到文件相对路径基准与预期不符显式设定工作目录并核对路径
产物写到意外的位置构建期目录设定与启动期不一致两个阶段都明确设定目录
临时切换目录无效在单条指令里切换目录只对该条生效改用专门的工作目录指令
目录层级与预期不符多次使用相对路径彼此叠加统一使用绝对路径
运行时被覆盖启动参数里另设了工作目录核对启动参数与镜像设定

设定目录的建议

  • 统一使用绝对路径,避免相对路径彼此叠加造成意外层级
  • 在工作目录设定之后再执行复制与安装,让路径语义一贯
  • 需要切回上层目录时显式写完整路径,不要依赖相对回溯
  • 运行阶段的工作目录要与启动命令、配置路径保持一致
  • 涉及权限的目录在设定后确认属主,避免运行用户无法写入
在单条执行指令里切换目录只对那条命令生效,下一条又回到原来的位置。需要持续生效就必须用工作目录指令。
工作目录会影响容器启动进程看到的相对路径。启动脚本里用相对路径读配置的镜像,改动工作目录等于改变了配置查找位置。

易错点

  • 在单条指令里切换目录,下一条指令又回到默认位置,路径问题反复出现
  • 多次使用相对路径设定工作目录,层级叠加后产物落到意外的位置
  • 改了工作目录但启动命令里的相对路径没跟着改,容器启动即报找不到文件
  • 设定的目录属主不对,运行用户无法写入,服务启动后立刻报权限错误

数据来源与参考

  • Docker 官方文档:Dockerfile WORKDIR(docs.docker.com)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌