workdir 指令用于设置容器默认工作目录,支持绝对路径、相对路径、环境变量展开,并影响 copy/add 的目标路径,且可被 docker run -w 参数覆盖。

WORKDIR 是 Dockerfile 中设置容器内默认工作目录的指令,写法简单但影响后续所有基于路径的操作。
基本写法:绝对路径最常用
直接指定容器内的完整路径,推荐用绝对路径避免歧义:
-
WORKDIR /app—— 设置工作目录为/app -
WORKDIR /opt/myapp/config—— 可嵌套多级,Docker 会自动创建不存在的父目录
相对路径写法:依赖前一个 WORKDIR
如果前面已有 WORKDIR,后续可用相对路径继续向下定位:
WORKDIR /src-
WORKDIR backend→ 实际目录是/src/backend -
WORKDIR bin→ 实际目录变成/src/backend/bin
支持环境变量:提前定义再引用
可以用 ENV 定义变量,然后在 WORKDIR 中展开(仅限 Dockerfile 内显式声明的变量):
ENV APP_HOME=/opt/app-
WORKDIR $APP_HOME→ 进入/opt/app -
WORKDIR $APP_HOME/logs→ 进入/opt/app/logs
和 COPY/ADD 的路径关系要特别注意
COPY 和 ADD 指令中的目标路径,若为相对路径,就相对于当前 WORKDIR:
WORKDIR /app-
COPY . .→ 把构建上下文当前目录所有文件复制到容器的/app下 -
ADD config.yml conf/→ 复制到/app/conf/config.yml
运行时可覆盖:docker run -w 优先级更高
镜像构建时设的 WORKDIR 可被运行时参数覆盖:
- Dockerfile 中写
WORKDIR /data - 启动时加
docker run -w /tmp myimage→ 容器实际工作目录变成/tmp - 此时 CMD 或交互命令都在
/tmp下执行,与镜像中设定无关











