最常用方式是docker cp命令,无需重启容器或重建镜像,支持运行中和已停止容器;语法为docker cp <源路径> <容器名或ID>:<目标路径>,可复制文件或目录并自动创建父级目录。
最常用、最直接的方式是使用 docker cp 命令。它不需要容器重启,不依赖镜像重建,也不要求提前配置挂载,适合绝大多数临时或调试场景。
确认容器状态和标识
先确保目标容器存在(运行中或已停止均可),并获取它的名称或 ID:
- 列出所有容器(含已停止的):docker ps -a
- 记下你要操作的容器名(如 my-nginx)或短 ID(如 a1b2c3d4)
用 docker cp 复制文件或目录
语法统一为:docker cp <源路径> <容器名或ID>:<目标路径>
- 复制单个文件:docker cp ./config.conf my-nginx:/etc/nginx/conf.d/
- 复制整个文件夹(注意末尾斜杠):docker cp ./logs/ my-nginx:/var/log/app/(./logs/ 含斜杠表示复制内容;./logs 不带斜杠则复制整个 logs 目录)
- 目标路径若不存在,Docker 会自动创建父级目录(如 /etc/nginx/conf.d/),但不会自动创建深层嵌套的中间目录(如 /a/b/c/d 中某层缺失时可能失败)
注意事项和常见问题
- 容器无需正在运行 —— docker cp 支持已停止容器
- 权限不会自动继承:复制后文件在容器内通常属 root,如需特定权限,进容器执行 chmod 或 chown
- 若需保留原始权限、时间戳等属性,加 -a 参数:docker cp -a ./script.sh my-nginx:/usr/local/bin/
- 路径写错易出错:宿主机路径是相对当前终端位置的,容器路径是绝对路径(以 / 开头)
其他方式简要对比
- 构建镜像时固化:用 COPY 指令写在 Dockerfile 中,适合配置、代码等长期不变的内容
- 启动时挂载目录:用 -v /host/path:/container/path,适合开发调试或日志共享,文件实时可见
- exec + cat/tar:技术上可行,但命令长、易出错,仅限特殊场景(如无 docker cp 的旧环境)


















