docker cp 命令支持宿主机与容器间单向文件复制,需两次操作实现“双向”;语法为 docker cp [源] [目标],路径可相对或绝对,容器可运行或停止;注意权限、目录复制行为及无通配符支持;进阶可用 tar 流式传输保留元数据。

在 Linux 中,Docker 容器与宿主机之间复制文件主要靠 docker cp 命令,它支持单向复制(宿主 ↔ 容器),但“双向”只是指你可分别执行两次操作:一次从宿主到容器,一次从容器到宿主。Docker 本身不提供原子性的双向同步命令(如 rsync 那样自动比对增删),需手动组合使用。
从宿主机复制文件/目录到容器
语法:docker cp [宿主机路径] [容器名或ID]:[容器内路径]
- 路径可以是绝对路径,也可用相对路径(当前终端所在目录)
- 容器必须处于运行或停止状态(
cp不要求容器运行) - 示例:
docker cp ./app.conf mynginx:/etc/nginx/conf.d/—— 把当前目录下的app.conf复制进容器mynginx的指定目录
从容器复制文件/目录到宿主机
语法:docker cp [容器名或ID]:[容器内路径] [宿主机路径]
在无 root/sudo 权限的环境(云容器、VPS、隔离主机)中安装并配置 OpenClaw 浏览器工具的 headless Chrome。适用场景:...
- 注意顺序和冒号位置,和上一条相反
- 若目标宿主机路径不存在,
docker cp会自动创建父目录(但不会自动创建深层嵌套的中间目录,只建最后一级) - 示例:
docker cp mynginx:/var/log/nginx/access.log ./logs/—— 把容器中 Nginx 访问日志拉到本地./logs/下
复制时的常见注意事项
权限与用户问题:复制后的文件在宿主机上归属当前执行命令的用户;在容器内则按容器内目标路径的默认属主(如 root)。若容器内应用以非 root 用户运行,且你复制配置文件到其配置目录,可能需要提前设好权限(如 chmod 644)或在容器内调整属主。
- 复制整个目录时,
docker cp默认不带尾部斜杠 ——docker cp /data/ container:/app/data会把/data目录内容复制进去;而docker cp /data container:/app会把/data这个目录整体复制为/app/data - 不支持通配符(如
*.log),需先打包(tar)再复制,或进入容器用tar流式传输(见下条)
进阶:用 tar 实现更灵活的复制(尤其含权限/软链/大量小文件)
当需要保留权限、符号链接、时间戳等,或想批量匹配文件,可用 tar + docker exec 组合:
- 从容器导出并解压到宿主机:
docker exec mynginx tar -cC /var/log nginx/ | tar -xC ./backup/ - 从宿主机打包并导入容器:
tar -cC ./config nginx.conf | docker exec -i mynginx tar -xC /etc/nginx/
这种方式绕过 docker cp 的限制,更适合生产环境精细控制。










