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

需求:在工作中,有时使用的软件是用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;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用以下步骤查看docker中镜像的Dockerfile文件详细: 1. 首先使用docker image ls命令,查看已有的docker镜像列表。 2. 找到目标镜像的ID或名称。 3. 使用docker history命令,查看该镜像的历史命令记录。 4. 找到该镜像的最后一条命令记录,并复制其对应的命令ID。 5. 使用docker inspect命令,查看该命令ID对应的详细信息。 6. 在查看的信息中,找到Config项,其中包含了该镜像的Dockerfile信息。 例如,假设我们要查看名为ubuntu的镜像的Dockerfile信息,可以按照以下步骤进行操作: 1. 运行docker image ls命令,查看已有的docker镜像列表: ``` $ docker image ls ``` 2. 找到目标镜像的ID或名称: ``` REPOSITORY TAG IMAGE ID CREATED SIZE ubuntu latest 74435f89ab78 9 days ago 73.9MB ``` 3. 使用docker history命令,查看该镜像的历史命令记录: ``` $ docker history ubuntu ``` 4. 找到该镜像的最后一条命令记录,并复制其对应的命令ID: ``` IMAGE CREATED CREATED BY SIZE COMMENT 74435f89ab78 9 days ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B ``` 5. 使用docker inspect命令,查看该命令ID对应的详细信息: ``` $ docker inspect 74435f89ab78 ``` 6. 在查看的信息中,找到Config项,其中包含了该镜像的Dockerfile信息: ``` "Config": { "Hostname": "", "Domainname": "", "User": "", "AttachStdin": false, "AttachStdout": false, "AttachStderr": false, "Tty": false, "OpenStdin": false, "StdinOnce": false, "Env": null, "Cmd": [ "/bin/bash" ], "Image": "sha256:74435f89ab784a13c2fa4b55d5cc4a3aa5cb8c4d2c7b2a0d7aaf84b17d8b4c9b", "Volumes": null, "WorkingDir": "", "Entrypoint": null, "OnBuild": null, "Labels": {} }, ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值