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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 你好,我理解你想问的问题是关于从Linux文件系统到Docker容器指定路径的问题。 首先,让我解释一下我的职责和限制。我是一个AI语言模型,我可以回答很多问题,但是我并不是一个具有实际编程和运行代码的能力的程序。因此,我可以为您提供有关这个问题的信息和建议,但是我不能为您编代码或为您解决具体的编程问题。 回答你的问题,如果您想将Linux文件系统中的文件复制Docker容器的指定路径中,您可以使用`docker cp`命令。该命令用于在Docker容器和主机系统之间复制文件和目录。以下是一些示例命令: 1. 将本地文件复制Docker容器中的指定路径: ``` docker cp /path/to/local/file container_name:/path/to/container/directory/ ``` 或 ``` docker cp /path/to/local/file container_id:/path/to/container/directory/ ``` 2. 将Docker容器中的文件复制到本地主机中: ``` docker cp container_name:/path/to/container/directory/ /path/to/local/directory/ ``` 或 ``` docker cp container_id:/path/to/container/directory/ /path/to/local/directory/ ``` 请注意,如果您使用的是Docker Desktop for Mac 或 Docker Desktop for Windows,则需要确保将要复制的本地路径在Docker Desktop的文件共享设置中列出。否则,您将无法复制本地文件Docker容器中。 希望这些信息对您有所帮助! ### 回答2: 在Linux中,我们可以使用`docker cp`命令将文件从主机复制Docker容器的指定路径。 首先,确保Docker容器正在运行。使用`docker ps`命令可以列出当前正在运行的容器。 然后,使用以下命令将文件复制容器中: ``` docker cp <文件路径> <容器名称或ID>:<目标路径> ``` - `<文件路径>`:指定要复制文件在主机中的路径。 - `<容器名称或ID>`:指定目标容器的名称或ID。 - `<目标路径>`:指定要复制到的目标路径。 例如,如果我们要将主机上的`/home/user/file.txt`文件复制到名为`my_container`的容器的`/root`路径中,我们可以使用以下命令: ``` docker cp /home/user/file.txt my_container:/root ``` 以上命令将文件`file.txt`从主机复制到了容器`my_container`的`/root`路径下。 通过执行以上命令,文件将被复制到指定的容器路径中。您可以通过访问容器来验证文件是否已成功复制到相应的路径中。 ### 回答3: 要从Linux复制文件Docker容器的指定路径,可以通过以下步骤完成: 首先,确保已经安装并配置了Docker,可以使用以下命令检查Docker是否已经安装并在运行中: ``` docker version ``` 接下来,在Linux中找到要复制文件的路径。假设要复制文件位于`/path/to/source/file.txt`。 然后,使用以下命令将文件复制Docker容器的指定路径。假设Docker容器的名称为`my-container`,要将文件复制容器内的`/path/to/destination/`路径: ``` docker cp /path/to/source/file.txt my-container:/path/to/destination/ ``` 该命令中,`docker cp`表示使用Docker提供的容器复制功能,`/path/to/source/file.txt`表示源文件的路径,`my-container:/path/to/destination/`表示目标容器及其指定路径。 执行命令后,文件将被复制Docker容器的指定路径中。 最后,可以在Docker容器中验证文件是否已成功复制到指定路径。可以使用以下命令进入Docker容器的终端: ``` docker exec -it my-container bash ``` 然后,再使用以下命令查看文件是否已经复制到指定路径: ``` ls /path/to/destination/ ``` 上述步骤完成后,文件将成功从Linux主机复制Docker容器的指定路径。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值