Docker 教程

Docker 容器复制文件

在 Docker 中,使用 docker container cp 命令在容器和本地文件系统之间复制文件或目录。

语法

语法如下:

用法: 
docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
docker cp [OPTIONS] SRC_PATH|- CONTAINER:DEST_PATH

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

使用 “-” 作为源,从 stdin 读取 tar 压缩文件并将其提取到容器中的目标目录。
使用 “-” 作为目标,可将容器源的 tar 压缩包流式传输到 stdout。

别名:
  docker container cp、docker cp

选项
  -a, --archive   存档模式(复制所有 uid/gid 信息)
  -L, --follow-link   始终跟随 SRC_PATH 中的符号链接
  -q,--quiet   在复制过程中抑制进度输出。如果未连接终端,进度输出会自动被抑制。

基本用法

从容器复制文件到本地

docker container cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH_LOCAL

参数说明:

  • CONTAINER  是容器的名称或 ID。

  • SRC_PATH  是容器内的源文件或目录路径。

  • DEST_PATH_LOCAL  是本地目标文件或目录路径。

例如:

# 查看运行中的容器
root@hxvm2:~# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS        PORTS                                       NAMES
7bfac83b61a3   redis          "docker-entrypoint.s…"   3 hours ago    Up 3 hours    0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis
41a203fa62c5   nginx:latest   "/docker-entrypoint.…"   20 hours ago   Up 20 hours   0.0.0.0:8080->80/tcp, :::8080->80/tcp       eager_taussig

# 从 nginx 容器中复制文件到宿主机
root@hxvm2:~# docker container cp 41a203fa62c5:/usr/share/nginx/html/index.html ./html/
Successfully copied 2.56kB to /root/html/

# 查看复制结果
root@hxvm2:~# ll ./html/
total 12
drwxr-xr-x 2 root root 4096  8月 23 13:58 ./
drwx------ 7 root root 4096  8月 23 13:57 ../
-rw-r--r-- 1 root root  615  8月 12 22:21 index.html

上面命令将 ID 为 41a203fa62c5 的容器中的 /usr/share/nginx/html 目录下 index.html 文件复制到本地当前目录下的 html 目录中。

从本地复制文件到容器

docker container cp [OPTIONS] SRC_PATH_LOCAL CONTAINER:DEST_PATH

参数说明:

  • SRC_PATH_LOCAL  是本地源文件或目录路径。

  • CONTAINER  是容器的名称或 ID。

  • DEST_PATH  是容器内的目标文件或目录路径。

例如:

# 查看运行中的容器
root@hxvm2:~# docker container ps
CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS        PORTS                                       NAMES
7bfac83b61a3   redis          "docker-entrypoint.s…"   3 hours ago    Up 3 hours    0.0.0.0:6379->6379/tcp, :::6379->6379/tcp   redis
41a203fa62c5   nginx:latest   "/docker-entrypoint.…"   20 hours ago   Up 20 hours   0.0.0.0:8080->80/tcp, :::8080->80/tcp       eager_taussig

# 在本地 html 目录中创建 demo.html 文件
root@hxvm2:~# echo '<h1>hello</h1>' > ./html/demo.html

# 查看 demo.html 文件内容
root@hxvm2:~# cat ./html/demo.html 
<h1>hello</h1>

# 将本地 demo.html 文件复制到容器
root@hxvm2:~# docker container cp ./html/demo.html 41a203fa62c5:/usr/share/nginx/html
Successfully copied 2.05kB to 41a203fa62c5:/usr/share/nginx/html

# 访问容器中的文件
root@hxvm2:~# curl localhost:8080/demo.html
<h1>hello</h1>

上面命令将把本地的 html 目录下的 demo.html 文件复制到 ID 为 41a203fa62c5 的容器中的 /usr/share/nginx/html 目录下。

常见用途

(1)备份容器内的数据

可以使用docker container cp将容器内的重要数据文件复制到本地进行备份,以防数据丢失。例如,定期将容器内的数据库文件复制到本地存储。

(2)向容器中添加配置文件或数据

在容器运行时,可能需要向容器中添加一些配置文件或数据文件。可以使用docker container cp从本地将这些文件复制到容器中。例如,向容器中的应用程序添加新的配置文件以改变其行为。

(3)调试和故障排除

当容器中的应用出现问题时,可以将容器内的日志文件复制到本地进行分析,以帮助确定问题的根源。例如,复制容器内的应用程序日志文件到本地,使用文本编辑器或日志分析工具进行查看。

总结

docker container cp 命令是一个方便的工具,用于在容器和本地文件系统之间进行文件复制操作,在管理和调试容器化应用时非常有用。但在使用时需要注意权限和路径正确性等问题。

说说我的看法
全部评论(
没有评论
关于
本网站属于个人的非赢利性网站,转载的文章遵循原作者的版权声明,如果原文没有版权声明,请来信告知:hxstrive@outlook.com
公众号