插件窝 干货文章 Docker中怎么拷贝文件?拷贝到哪?

Docker中怎么拷贝文件?拷贝到哪?

容器 宿主机 路径 拷贝 329    来源:    2025-04-28

在 Docker 中拷贝文件主要涉及两种场景:容器与宿主机之间的拷贝,以及容器内部的拷贝。以下是详细方法和注意事项:


一、容器与宿主机之间拷贝文件

1. 从宿主机拷贝到容器

docker cp /宿主机/文件路径 容器名或ID:容器内目标路径

示例

docker cp ~/test.txt mycontainer:/app/data/
  • 文件会拷贝到容器的 /app/data/ 目录下。
  • 如果容器内路径不存在,Docker 会自动创建父目录。

2. 从容器拷贝到宿主机

docker cp 容器名或ID:容器内文件路径 /宿主机/目标路径

示例

docker cp mycontainer:/var/log/app.log /tmp/
  • 文件会保存到宿主机的 /tmp/ 目录。

注意事项:

  • 命令需在宿主机执行,而非容器内。
  • 路径可以是文件或目录。
  • 使用 docker ps 查看容器名或ID。

二、容器内部拷贝文件

如果需要在容器内部拷贝文件(例如在构建镜像时),推荐以下方法:

1. 通过 DockerfileCOPYADD 指令

COPY 宿主机文件 容器内路径
ADD 宿主机文件 容器内路径
  • COPY 直接拷贝文件。
  • ADD 支持自动解压压缩包和远程 URL(但推荐用 COPY 更明确)。

示例

COPY ./app/config.ini /app/config/

2. 在运行中的容器内操作

如果容器已运行,可以进入容器后使用常规命令:

docker exec -it 容器名或ID /bin/bash
# 在容器内执行:
cp /path/to/source /path/to/destination

三、文件应该拷贝到哪里?

  • 临时调试:可拷贝到容器的 /tmp/ 目录(临时存储)。
  • 持久化存储:建议挂载宿主机目录(-v 参数),而非直接拷贝到容器内。 bash docker run -v /宿主机路径:/容器路径 myimage
  • 构建镜像:通过 Dockerfile 将文件拷贝到镜像的指定路径(如 /app/)。

四、常见问题

  1. 权限问题

    • 确保容器内用户对目标路径有写权限。
    • 可用 chmodchown 调整权限。
  2. 路径不存在

    • 使用绝对路径(如 /app/data/)而非相对路径。
  3. 拷贝后文件消失

    • 如果容器重启且未挂载卷,文件会丢失。持久化数据务必使用 -v 挂载。

总结

场景 命令或方法 推荐路径
宿主机→容器 docker cp /app//data/
容器→宿主机 docker cp 宿主机的临时目录(如 /tmp/
构建镜像时 DockerfileCOPY/ADD 镜像内的固定路径(如 /usr/src/app/
容器内部操作 docker exec + cp 根据需求选择路径

通过合理选择方法,可以高效管理 Docker 中的文件流转。