Linux 写一个批量复制文件到docker容器的bash脚本

Source

需求:在工作中,有时使用的软件是用docker服务部署的为了数据的安全又没有使用volume 命令挂载目录而且docker容器中也没有解压命令,然而docker cp 命令每次只能复制一个文件,这样脚本测试起来就非常的麻烦。实现批量复制脚本是非常必要的。

1、首先需要了解docker 的复制命令,有两种 一种是从容器复制到宿主机,另一种是从宿主机里复制到容器。

1、容器->宿主机 docker cp  container:/tmp/xxxx.log /tmp 

2、宿主机->容器:docker cp /tmp/xxxx.log container:/tmp

 2、找到需要复制的容器ID,可以使用 docker ps | grep 'xxxxx' | awk '{print $1}',找到这个值。例如:471aecda9acf, awk '{print $1}' 是打印第一列的值

3、使用 docker复制命令:docker cp 471aecda9acf:/tmp/xxxx.log /tmp 就可以将docker中/tmp 目录下存在的xxxx.log 文件复制到宿主机的 /tmp目录。

脚本思路:

1、判断是否启动docker 服务 systemctl status docker | grep running

2、查看当前文件的路径  `pwd `

3、找到要复制的容器的ID docker ps | grep 'xl-job-executor' | awk '{print $1}

4、判断容器是否存在 if [ -n "$container" ]; then

5、判断宿主机脚本是否存在 if test -e ${path_dir}/$1; then

6、复制文件到docker容器 docker cp ${path_dir}/$1 $container:/usr/software/check

7、复制成功打印结果 echo "copy $1 is OK, $container"

#!/bin/bash
:<<EOF
1、查看docker状态
2、复制当前文件到docker容器
EOF
status=$(systemctl status docker | grep running)
if [[ $? == 0 ]]; then
  path_dir=$(pwd)
  container=$(docker ps | grep 'xl-job-executor' | awk '{print $1}')
  if [ -n "$container" ]; then
    if test -e ${path_dir}/$1; then
      docker cp ${path_dir}/$1 $container:/usr/software/check
      if [[ $? == 0 ]]; then
        echo "+++--------------------------------------+++"
        echo "copy $1 is OK, $container"
      else
        echo "copy Failed "
      fi
    else
      echo "$1 file not found"
    fi
  else
    echo "xl-job-executor* not found container"
  fi
else
  echo 'docker is not running, please start docker'
fi

注:$? 可使用$? 获取上次执行命令的结果,0执行成功,且有返回值,其它执行失败

        test -e /file  判断文件是否存

        -n "$container" 可以判断字符串是否为空

4、上述代码只是复制脚本的一个快捷方式,但是也只能复制一个脚本。还需要使用以下代码,可实行批量复制.docker_cp.sh一定要加入到环境变量才可以这样执行。添加环境变量的方法

for file in `ls deploy_check_pg_*`;do docker_cp.sh $file; done;