在 Docker 中拷贝文件主要涉及两种场景:容器与宿主机之间的拷贝,以及容器内部的拷贝。以下是详细方法和注意事项:
docker cp /宿主机/文件路径 容器名或ID:容器内目标路径
示例:
docker cp ~/test.txt mycontainer:/app/data/
/app/data/ 目录下。docker cp 容器名或ID:容器内文件路径 /宿主机/目标路径
示例:
docker cp mycontainer:/var/log/app.log /tmp/
/tmp/ 目录。docker ps 查看容器名或ID。如果需要在容器内部拷贝文件(例如在构建镜像时),推荐以下方法:
Dockerfile 的 COPY 或 ADD 指令COPY 宿主机文件 容器内路径
ADD 宿主机文件 容器内路径
COPY 直接拷贝文件。ADD 支持自动解压压缩包和远程 URL(但推荐用 COPY 更明确)。示例:
COPY ./app/config.ini /app/config/
如果容器已运行,可以进入容器后使用常规命令:
docker exec -it 容器名或ID /bin/bash
# 在容器内执行:
cp /path/to/source /path/to/destination
/tmp/ 目录(临时存储)。-v 参数),而非直接拷贝到容器内。
bash
docker run -v /宿主机路径:/容器路径 myimageDockerfile 将文件拷贝到镜像的指定路径(如 /app/)。权限问题:
chmod 或 chown 调整权限。路径不存在:
/app/data/)而非相对路径。拷贝后文件消失:
-v 挂载。| 场景 | 命令或方法 | 推荐路径 |
|---|---|---|
| 宿主机→容器 | docker cp |
/app/ 或 /data/ |
| 容器→宿主机 | docker cp |
宿主机的临时目录(如 /tmp/) |
| 构建镜像时 | Dockerfile 的 COPY/ADD |
镜像内的固定路径(如 /usr/src/app/) |
| 容器内部操作 | docker exec + cp |
根据需求选择路径 |
通过合理选择方法,可以高效管理 Docker 中的文件流转。