docker cp 可直接实现容器与宿主机间单向文件传输,无需容器运行或进入内部;支持从容器复制到宿主机(如 docker cp myapp:/app/config/ ./config-backup/)和反向复制(如 docker cp ./data/ myapp:/tmp/import/),需注意路径写法、权限及目录处理规则。

直接用 docker cp 就能完成容器与宿主机之间的单向文件传输,它不依赖容器是否运行,也不需要进入容器内部,操作简单、稳定可靠。
从容器复制文件或目录到宿主机
命令格式为:docker cp :
- 如果宿主机目标路径不存在,且末尾不带
/,Docker 会自动创建该路径并把文件放进去 - 如果目标路径存在且是目录,文件会以原名放入该目录中
- 复制整个目录时建议加
-r参数,例如:docker cp -r myapp:/app/config/ ./config-backup/ - 想保留原始权限和时间戳,可加
-a或-p,如:docker cp -a myapp:/var/log/app.log ./
从宿主机复制文件或目录到容器
命令格式为:docker cp :
使用 Python 脚本下载 Docker 镜像并打包为 tar 文件。用户说“下载镜像”“拉取镜像”“pull xxx”“帮我下载 nginx 镜像”等时触发。支持 SOCKS5 代理直连(推荐)和国内镜像站加速两种模式。
- 容器内目标路径若不存在,Docker 会自动创建(但仅限最后一级目录)
- 若目标路径以
/结尾,Docker 会把它当作目录处理;否则按文件名处理 - 复制目录时同样需加
-r,例如:docker cp -r ./data/ myapp:/tmp/import/ - 注意:容器内目标路径必须有写入权限,否则复制会失败(常见于只读文件系统或权限受限的目录)
路径写法的关键细节
容器内路径始终以 / 开头,是绝对路径;宿主机路径是相对于当前 shell 所在目录的相对路径,也可写成绝对路径(如 /home/user/file.txt)。
-
docker cp myapp:/etc/hosts ./hosts.bak→ 复制到当前目录,命名为 hosts.bak -
docker cp myapp:/etc/hosts ./etc/→ 复制进当前目录下的 etc/ 子目录,保留原名 hosts -
docker cp ./app.jar myapp:/opt/app.jar→ 把本地 jar 包放进容器 /opt/ 目录 -
docker cp ./conf/ myapp:/etc/conf/→ 注意结尾斜杠,表示覆盖 /etc/conf/ 下内容(非替换整个目录)
实用小技巧
遇到权限或路径报错时,可先用 docker exec -it ls -l 确认容器内路径是否存在、是否可写。
- 复制前可用
docker ps -a查容器状态,已停止的容器也能用docker cp - 不想手动记 ID,可用容器名(如
nginx-web)代替,前提是名字唯一 - 批量操作建议写成脚本,比如备份多个配置文件:
docker cp nginx-web:/etc/nginx/conf.d/ ./backup/nginx-conf/

















