如何从主机复制文件到Docker容器

如何从主机复制文件到Docker容器

技术背景

在使用Docker进行开发和部署时,经常需要将主机上的文件复制到Docker容器中,或者从容器中复制文件到主机。这在配置容器环境、更新应用程序等场景中非常常见。

实现步骤

使用 docker cp 命令

docker cp 是最简单和常用的方法,支持从主机到容器以及从容器到主机的文件复制。

复制单个文件到容器

1
docker cp foo.txt container_id:/foo.txt

从容器复制单个文件到主机

1
docker cp container_id:/foo.txt foo.txt

复制文件夹中的多个文件到容器

1
docker cp src/. container_id:/target

从容器复制文件夹中的多个文件到主机

1
docker cp container_id:/src/. target

在Docker 1.8之前的方法

在Docker 1.8之前,只能从容器复制文件到主机。若要将文件从主机复制到容器,步骤如下:

  1. 获取容器名称或短容器ID:
1
docker ps
  1. 获取完整容器ID:
1
docker inspect -f '{{.Id}}' SHORT_CONTAINER_ID-or-CONTAINER_NAME
  1. 复制文件:
1
sudo cp path-file-host /var/lib/docker/aufs/mnt/FULL_CONTAINER_ID/PATH-NEW-FILE

使用 docker exec 命令

通过 docker exec 结合 cat 命令将文件内容传递到容器中。

1
docker exec -i container_id sh -c 'cat > ./bar/foo.txt' < ./foo.txt

使用挂载目录

在启动容器时挂载主机目录,然后在容器内进行文件操作。

1
2
3
{host} docker run -v /path/to/hostdir:/mnt --name my_container my_image
{host} docker exec -it my_container bash
{container} cp /mnt/sourcefile /path/to/destfile

使用 tar 命令

1
tar -c foo.sh | docker exec -i theDockerContainer /bin/tar -C /tmp -x

核心代码

复制单个文件到容器

1
docker cp foo.txt container_id:/foo.txt

使用 docker exec 复制文件

1
docker exec -i container_id sh -c 'cat > ./bar/foo.txt' < ./foo.txt

使用挂载目录

1
docker run -v /path/to/hostdir:/mnt --name my_container my_image

最佳实践

  • 优先使用 docker cp:该命令简单直接,能满足大多数文件复制需求。
  • 使用挂载目录:如果需要频繁在主机和容器之间共享文件,建议在启动容器时挂载主机目录。
  • 查看容器ID:使用 docker ps 命令查看容器ID或名称,避免使用错误的ID。

常见问题

  • 权限问题:使用挂载目录时,可能会遇到权限问题,因为容器内的用户和主机用户可能不同。可以在容器内调整文件权限来解决。
  • 路径问题:目标路径必须预先存在,否则 docker cp 命令会失败。可以先在容器内创建所需路径。
  • Docker版本兼容性:在Docker 1.8之前,docker cp 不支持从主机到容器的文件复制,需要使用其他方法。

如何从主机复制文件到Docker容器
https://119291.xyz/posts/2025-05-14.how-to-copy-files-from-host-to-docker-container/
作者
ww
发布于
2025年5月14日
许可协议