全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📅 2026-05-21 5 分钟 ✍️ juanwangdev

WORKDIR 与 ENV 指令

WORKDIR 和 ENV 是 Dockerfile 中管理路径与环境的关键指令。

WORKDIR 指令

设置工作目录

dockerfile
# 设置工作目录
WORKDIR /app

# 后续指令在此目录下执行
COPY package.json ./
RUN npm install
COPY . .

# 可多次切换
WORKDIR /app
RUN pwd  # /app

WORKDIR /src
RUN pwd  # /src

WORKDIR /app/dist
RUN pwd  # /app/dist

WORKDIR 可多次使用,后续指令(RUN、CMD、COPY、ADD、ENTRYPOINT)在该目录下执行。

路径规则

dockerfile
# 绝对路径
WORKDIR /app

# 相对路径(基于上一级 WORKDIR)
WORKDIR src  # 实际为 /app/src

# 引用环境变量
WORKDIR $APP_HOME

避免使用 RUN cd

dockerfile
# 错误做法(RUN 不影响后续指令)
RUN cd /app
RUN npm install  # 不在 /app 目录下

# 正确做法
WORKDIR /app
RUN npm install

ENV 指令

设置环境变量

dockerfile
# 单行设置
ENV NODE_ENV=production

# 多行设置
ENV APP_HOME=/app \
    PORT=3000 \
    DB_HOST=localhost

# 使用变量
ENV APP_HOME=/app
WORKDIR $APP_HOME
COPY . $APP_HOME/src

环境变量作用域

dockerfile
# 构建时可用
ENV VERSION=1.0
RUN echo "Building version $VERSION"

# 运行时可用
ENV PORT=3000
CMD ["node", "server.js"]  # 进程可读取 PORT 环境变量

查看环境变量

Bash
# 构建后查看
docker inspect my-image | grep -A 10 "Env"

# 运行时查看
docker exec my-container env

# 运行时修改
docker run -e NEW_VAR=value my-image

状态传递

dockerfile
# WORKDIR 状态传递
WORKDIR /app      # 设置 /app
COPY . .          # 拷贝到 /app
RUN npm install   # 在 /app 执行

# ENV 状态传递
ENV NODE_ENV=production
ENV PORT=3000

# 后续指令均可引用
EXPOSE $PORT
CMD ["node", "server.js"]

实用示例

dockerfile
FROM node:18-alpine

# 环境变量
ENV APP_HOME=/app \
    NODE_ENV=production \
    PORT=3000

# 工作目录
WORKDIR $APP_HOME

# 安装依赖
COPY package*.json ./
RUN npm ci --only=production

# 拷贝代码
COPY . .

# 暴露端口
EXPOSE $PORT

# 启动
CMD ["node", "server.js"]

要点总结

  • WORKDIR 设置工作目录,影响后续所有指令的执行路径
  • 避免使用 RUN cd,应使用 WORKDIR 切换目录
  • ENV 设置环境变量,构建和运行时均可访问
  • 环境变量可在后续指令中引用($VAR 或 ${VAR})
  • WORKDIR 和 ENV 状态在 Dockerfile 中逐行传递

📝 发现内容有误?点击此处直接编辑

← 上一篇 EXPOSE 端口声明
下一篇 → 构建自定义镜像
想查看更多题目和详细解析?
小程序提供完整的题库、模拟考试和详细解析
马上就来

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库