UNPKG

hudada-cli

Version:

专为程序员准备的本地文档搜索,快捷开发工具

222 lines (171 loc) 4.18 kB
# Docker 工作目录指南 ## 一、Docker 工作目录概述 Docker 工作目录(Working Directory)是容器内部的当前工作目录,通过 `WORKDIR` 指令设置。它影响容器内部命令的执行路径和文件操作的相对路径。 ### 1. 主要作用 - 设置容器内部的当前工作目录 - 影响后续指令的执行路径 - 提供更好的文件组织结构 - 增强安全性和可维护性 ## 二、WORKDIR 指令使用 ### 1. 基本语法 ```dockerfile # Dockerfile 中设置工作目录 WORKDIR /path/to/workdir # 示例 WORKDIR /app WORKDIR /usr/src/app ``` ### 2. 特性说明 - 可以使用绝对路径或相对路径 - 如果目录不存在会自动创建 - 可以使用环境变量 - 支持多次设置,路径会叠加 ### 3. 使用示例 ```dockerfile # 基本用法 FROM node:14 WORKDIR /app COPY . . RUN npm install # 使用环境变量 FROM ubuntu ENV APP_HOME=/usr/src/app WORKDIR $APP_HOME # 相对路径 WORKDIR /app WORKDIR src WORKDIR app # 最终路径为 /app/src/app ``` ## 三、常见使用场景 ### 1. Node.js 应用 ```dockerfile FROM node:14-alpine # 设置工作目录 WORKDIR /usr/src/app # 复制依赖文件 COPY package*.json ./ # 安装依赖 RUN npm install # 复制源代码 COPY . . # 启动应用 CMD ["npm", "start"] ``` ### 2. Python 应用 ```dockerfile FROM python:3.8-slim # 设置工作目录 WORKDIR /app # 复制依赖文件 COPY requirements.txt . # 安装依赖 RUN pip install -r requirements.txt # 复制应用代码 COPY . . # 启动应用 CMD ["python", "app.py"] ``` ### 3. Web 服务器 ```dockerfile FROM nginx:alpine # 设置工作目录 WORKDIR /usr/share/nginx/html # 复制静态文件 COPY ./dist . # 复制配置文件 COPY nginx.conf /etc/nginx/conf.d/default.conf ``` ## 四、最佳实践 ### 1. 目录结构规范 ```plaintext /app # 应用根目录 ├── src/ # 源代码 ├── config/ # 配置文件 ├── logs/ # 日志文件 └── data/ # 数据文件 ``` ### 2. 安全性考虑 ```dockerfile # 创建专用用户 RUN adduser --disabled-password --gecos "" appuser # 设置工作目录 WORKDIR /app # 设置目录权限 RUN chown -R appuser:appuser /app # 切换用户 USER appuser ``` ### 3. 多阶段构建 ```dockerfile # 构建阶段 FROM node:14 AS builder WORKDIR /build COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 生产阶段 FROM nginx:alpine WORKDIR /usr/share/nginx/html COPY --from=builder /build/dist . ``` ## 五、常见问题解决 ### 1. 权限问题 ```dockerfile # 设置目录权限 WORKDIR /app RUN chown -R node:node /app USER node ``` ### 2. 路径问题 ```dockerfile # 使用绝对路径 WORKDIR /app COPY . . # 避免使用相对路径 WORKDIR /app COPY ./src ./src # 明确指定源和目标 ``` ### 3. 环境变量 ```dockerfile # 使用 ARG 和 ENV ARG APP_HOME=/app ENV APP_HOME=${APP_HOME} WORKDIR ${APP_HOME} ``` ## 六、调试技巧 ### 1. 检查工作目录 ```bash # 查看容器工作目录 docker inspect -f '{{.Config.WorkingDir}}' container_name # 进入容器并检查 docker exec -it container_name pwd ``` ### 2. 验证文件位置 ```bash # 列出工作目录内容 docker exec -it container_name ls -la # 检查文件权限 docker exec -it container_name ls -l /app ``` ### 3. 临时修改工作目录 ```bash # 在运行时指定工作目录 docker run -w /custom/path image_name command # 在 exec 时指定工作目录 docker exec -w /custom/path container_name command ``` ## 七、注意事项 1. **路径设置** - 使用绝对路径而不是相对路径 - 确保路径存在或能被创建 - 注意路径权限问��� 2. **用户权限** - 合理设置目录所有者 - 避免使用 root 用户 - 正确设置文件权限 3. **性能考虑** - 避免频繁切换工作目录 - 合理组织文件结构 - 注意文件系统性能影响