如何从远程Docker容器中复制文件?
从远程机器的Docker容器下载文件的几种方法
没问题!既然你已经通过SSH连接到远程机器了,下面几种实用方法可以帮你把容器里的特定文件弄到本地,按需选择就行:
方法一:先复制到远程机器,再传到本地(最通用,无需额外配置)
这是最稳妥的方式,不管容器状态如何都能生效:
- 在SSH连接的远程机器终端里,先找到目标容器的名称或ID:
docker ps # 查看运行中的容器 # 或者如果容器没运行,用 docker ps -a - 把容器内的文件复制到远程机器的本地目录(比如
/tmp临时目录):docker cp <容器名或ID>:<容器内文件的绝对路径> <远程机器的目标路径> # 举个例子:docker cp my-web-app:/var/log/nginx/access.log /tmp/nginx-access.log - 新开一个本地终端(别关掉SSH的窗口),用
scp把远程机器上的文件传到你的本地电脑:scp <远程机器用户名>@<远程机器IP>:/tmp/nginx-access.log <本地电脑的目标路径> # 例子:scp ubuntu@192.168.3.10:/tmp/nginx-access.log ~/Documents/Logs/
方法二:直接通过远程Docker Daemon复制(一步到位,需小配置)
如果不想折腾两次复制,可以让本地Docker直接连接远程的Docker服务,一步把文件拉到本地:
- 直接在本地终端执行以下命令,让本地Docker命令关联远程机器的Docker服务:
export DOCKER_HOST=ssh://<远程机器用户名>@<远程机器IP> - 现在本地Docker命令就会直接操作远程的容器了,执行
docker cp直接拉文件到本地:docker cp <远程容器名或ID>:<容器内文件路径> <本地目标路径> # 例子:docker cp my-web-app:/var/log/nginx/access.log ~/Documents/Logs/ - 操作完如果想切回本地Docker环境,执行
unset DOCKER_HOST即可。
方法三:通过容器内的服务传输(适合特殊场景)
如果你的容器里装了SSH或HTTP服务(比如sshd、nginx),也可以直接从容器拉取,但需要额外配置,一般不推荐作为首选:
- 先获取容器的IP地址:
docker inspect <容器名或ID> | grep -A 2 "IPAddress" - 如果容器有SSH服务,直接用
scp从容器IP拉文件(需要知道容器内的用户名和密码):scp <容器内用户名>@<容器IP>:<文件路径> <本地目标路径> - 如果容器用HTTP服务共享了文件,也可以直接用
curl或wget下载:curl http://<容器IP>:<端口>/<文件路径> -o <本地目标路径>
小提示
docker cp命令不管容器是否处于运行状态都能使用,不用特意启动容器~- 容器内的文件路径尽量用绝对路径,避免因为容器工作目录不同导致找不到文件。
内容的提问来源于stack exchange,提问作者Andrej Hucko
相关产品推荐
相关产品推荐

