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

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

详细说明及使用可参考官方docker cp文档

说明

在容器和本地文件系统之间复制文件/文件夹

用法

1
2
$ docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
$ docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

例如,docker正在运行了一个jenkins,CONTAINER ID为3a3d34f3a3c0,接下来以此容器做展示:

CONTAINER ID IMAGE 其他略 NAMES
3a3d34f3a3c0 docker.io/jenkins/jenkins:lts 其他略 jenkins

注:以下命令中使用 CONTAINER ID 的地方也可用 NAMES 代替

容器到主机

将文件或文件夹从Docker容器复制到本地文件系统。

重要:此种有两种情况需要区分,第一种你在主机,第二种你已经进入了docker jenkins容器中

  • 第一种:在主机
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 将jenkins容器中 /var/jenkins_home/project1 目录拷贝到主机的 /srv/jenkins
    $ docker cp 3a3d34f3a3c0:/var/jenkins_home/project1 /srv/jenkins

    # 将jenkins容器中 /var/jenkins_home/project1 目录中 README.md 文件拷贝到主机的 /srv/jenkins
    $ docker cp 3a3d34f3a3c0:/var/jenkins_home/project1/README.md /srv/jenkins

    # 将jenkins容器中 /var/jenkins_home/project1/build 目录中所有文件拷贝到主机的 /srv/jenkins/www
    $ docker cp 3a3d34f3a3c0:/var/jenkins_home/project1/build/. /srv/jenkins/www

    # 将jenkins容器中 /var/jenkins_home/project1/build 目录中 README.md 文件拷贝到当前本地工作目录
    $ docker cp 3a3d34f3a3c0:/var/jenkins_home/project1/build/README.md .

如果容器中不存在复制的目录或文件,则报错

  • 第二种:已经进入了docker jenkins容器中(docker exec -it “3a3d34f3a3c0” bash)

将jenkins容器中/var/jenkins_home/workspace/project2/build中所有文件拷贝到主机的/srv/www中

前置环境变量:

1
2
$ export JENKINS_HOME=/srv/jenkins
$ export NGINX_WWW=/srv/www

需要借助docker run –volume,docker jenkins启动命令需要改成:

1
$ docker run --name jenkins -u root -d -p 7199:8080 -p 50000:50000 -v $JENKINS_HOME:/var/jenkins_home -v $NGINX_WWW:/srv/www docker.io/jenkins/jenkins:lts

重要:额外增加了一个参数

$NGINX_WWW:/srv/www``` 挂载目录
1
2
3
4

最后,直接执行即可
```js
$ cp -rf /var/jenkins_home/workspace/project2/build/. /srv/www/

主机到容器

将文件或文件夹从本地文件系统复制到Docker容器,其工作原理相同

1
2
3
4
5
6
7
8
9
10
11
# 将主机的 /srv/jenkins 拷贝到jenkins容器中 /var/jenkins_home/project1 目录
$ docker cp /srv/jenkins 3a3d34f3a3c0:/var/jenkins_home/project1

# 将主机的 /srv/jenkins 目录中 README.md 拷贝到jenkins容器中 /var/jenkins_home/project1文件
$ docker cp /srv/jenkins/README.md 3a3d34f3a3c0:/var/jenkins_home/project1

# 将主机的 /srv/jenkins/www 中所有文件拷贝到jenkins容器中 /var/jenkins_home/project1/build 目录
$ docker cp /srv/jenkins/www/. 3a3d34f3a3c0:/var/jenkins_home/project1/build

# 将当前本地工作目录拷贝到jenkins容器中 /var/jenkins_home/project1/build 目录中
$ docker cp . 3a3d34f3a3c0:/var/jenkins_home/project1/build
0%