在 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 /宿主机路径:/容器路径 myimage
Dockerfile
将文件拷贝到镜像的指定路径(如 /app/
)。权限问题:
chmod
或 chown
调整权限。路径不存在:
/app/data/
)而非相对路径。拷贝后文件消失:
-v
挂载。场景 | 命令或方法 | 推荐路径 |
---|---|---|
宿主机→容器 | docker cp |
/app/ 或 /data/ |
容器→宿主机 | docker cp |
宿主机的临时目录(如 /tmp/ ) |
构建镜像时 | Dockerfile 的 COPY /ADD |
镜像内的固定路径(如 /usr/src/app/ ) |
容器内部操作 | docker exec + cp |
根据需求选择路径 |
通过合理选择方法,可以高效管理 Docker 中的文件流转。