知易网
白蓝主题五 · 清爽阅读
首页  > 硬件维护

Docker复制文件到容器的实用操作方法

在日常运维中,经常需要把本地配置ref="/tag/182/" style="color:#2B406D;font-weight:bold;">文件或脚本传进正在运行的Docker容器里。比如更新一个Nginx的站点配置,或者调试时塞个日志分析小工具,这时候用命令直接复制文件最省事。

使用docker cp命令传文件

Docker自带的docker cp命令就是干这活的,语法简单,和Linux下的cp差不多。想把宿主机上的app.conf文件复制到容器里的/etc/nginx/conf.d/目录下,就这么写:

docker cp app.conf 容器名:/etc/nginx/conf.d/app.conf

反过来也能从容器里往外拿文件。比如某个服务生成了日志,想拉到本地看:

docker cp 容器名:/var/log/service.log ./service.log

注意容器状态和路径问题

这个命令对运行中和已停止的容器都有效,但得确保容器存在且名字没写错。路径也得写全,特别是目标路径要确认容器里有对应目录,不然会报“no such directory”。比如往/opt/app/传文件前,最好先进容器看看这个路径是否存在。

实战场景:快速更新配置

举个例子,手头有个叫web-server的容器跑着业务,现在要紧急修复一个URL跳转问题,改好了nginx.conf,直接复制过去替换:

docker cp nginx.conf web-server:/etc/nginx/nginx.conf

然后进容器reload一下Nginx:

docker exec web-server nginx -s reload

几秒钟就完成热更新,比重建容器快多了。这种操作在硬件资源紧张的老服务器上特别实用,能避免因重启服务导致的短暂中断。

还有一种情况,批量维护多台机器时,可以把复制命令写进脚本,搭配SSH一起用,实现远程推送配置。比如在运维笔记本上写个循环,给一组测试机统一更新版本号文件:

for host in host1 host2 host3; do
ssh $host "docker cp version.txt myapp:/app/version.txt"
done

这样不用挨个登录操作,效率提升明显。