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


如果您正在运行一个 Docker 容器,并且想要将文件从主机复制到 Docker 容器中,有几种方法可以实现。一种方法是在 Dockerfile 中使用 ADD 或 COPY 指令,并在启动容器时传入您想要包含在容器中的文件的路径。但是,如果您已经运行了一个容器,该怎么办呢?为了仅仅包含一个小文件而一遍遍地构建相同的镜像是不可行的。

为了避免这种情况,Docker 提供了几种不同的方法和命令,以便在从镜像创建容器后,将文件从主机复制到容器。在本文中,我们将讨论不同的方法。让我们检查一下每种方法。

方法 1. 使用 Docker cp 命令

Docker cp 命令可以用来将文件和目录从主机复制到容器,反之亦然。要将单个文件从主机复制到容器,可以使用以下命令。

$ docker cp file.txt container-name:/path/to/copy/file.txt

您也可以使用容器 ID。要查找容器的名称或 ID,您可以列出所有容器。

$ docker ps -a

如果要将主机中文件夹中的多个文件复制到容器,可以使用以下命令。

$ docker cp src/directory/. container-name:/target/directory/location

方法 2. 挂载主机目录

将文件从主机复制到容器的另一种方法是在创建容器时将主机上的目录挂载到 Docker 容器。这样,您可以通过将文件复制到主机上的挂载文件夹来直接复制任何文件或目录。让我们看看如何操作。

$ docker run -d -v /path/to/directory/in/host:/mount --name=<container-name> <image name>

您可以在主机上运行此命令来运行容器,并使用 -v 选项将主机上的目录挂载到容器。您在此目录中复制的任何文件都可以在容器内的挂载目录中访问。

现在,让我们尝试通过使用 Docker exec 命令运行 bash 命令来访问容器的 bash。

$ docker exec -it <container-name> bash

现在您可以访问容器的 bash 了,您可以运行以下命令来复制文件。

$ cp /mnt/sourcefile /path/to/destfile

方法 3. 使用 cat 命令

在创建容器时复制文件的另一种相当简单的方法是使用 cat 命令作为 Docker run 命令的参数。

$ docker run -i ubuntu /bin/bash -c 'cat > filetobecopied' < filetobecopied

如果您已经运行了 Docker 容器,则可以使用 Docker exec 命令和相同的 cat 命令。

$ docker exec -it <container-name> bash -c 'cat > /path/to/docker-container/file.txt' <
/path/to/host-machine/file.txt

方法 4. 使用 tar 命令

您还可以使用 tar 命令将文件转换为 tarball 文件,并将其与 Docker exec 命令一起使用管道传输。以下命令将 file.txt 文件复制到容器内的 /usr 目录。

$ tar -c file.txt | docker exec -i docker-container /bin/tar -C /usr -x

总而言之,在本文中,我们讨论了四种将文件从主机复制到 Docker 容器的不同方法。我们了解了如何将文件从主机复制到正在运行的容器以及尚未创建的容器。我们使用了 Docker cp、Docker exec 等工具来完成此任务。最好的方法是使用传统的 Docker cp 命令。根据您的需求和用例,您可以选择最佳方法来复制文件。

更新于:2021年8月6日

17K+ 浏览量

启动您的 职业生涯

通过完成课程获得认证

开始
广告