在日常运维中,经常需要把本地配置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这样不用挨个登录操作,效率提升明显。