在使用docker的过程中碰到如下问题:
目的:复制容器内某一后缀的文件到宿主机上,例如从pg容器中复制以.log结尾的文件到宿主机上
尝试过程:
1. 进入pg容器发现在
/opt/configure/目录下存在文件
configure.log
docker cp pg:/opt/configure/configure.log
2. 使用常规命令
docker cp pg:/opt/configure/configure.log ./ 拷贝容器中的
configure.log到宿主机的当前目录下。执行成功
3.使用通配符执行命令
docker cp pg:/opt/configure/*.log ./ 拷贝容器中的configure.log到宿主机的当前目录下。执行失败,推测docker cp命令不支持通配符使用,待确认。
4.使用脚本来达到复制容器内某一后缀的文件到宿主机上的目的。
脚本简化后如下所示:
#! /bin/bash
string=$( docker exec -it pg /bin/bash -c "ls /opt/configure/*.log" )
echo ${string}
docker cp pg:${string} ./
脚本执行结果如下:
/opt/configure/configure.log
Error response from daemon: lstat /var/lib/docker/devicemapper/mnt/b102410508124b7149b441c47438337b53910c40751f9a9a578df8b91e7cc4d5/rootfs/opt/configure/configure: no such file or directory
第一句打印执行的是echo ${string},证明变量中的值正确。之后的docker cp命令执行失败。
如果直接在命令行里执行如下两句
string="/opt/configure/configure.log"
docker cp pg:${string} ./
执行成功
想询问一下,脚本执行不成功的问题出在了那里。