Docker容器動(dòng)態(tài)綁定數(shù)據(jù)卷

dynamic_mount_docker_volume.sh

#!/bin/bash
#This script is dynamic mount docker volumens
if [ -z $1 ] || [ -z $2 ] || [ -z $3 ]; then
    echo "Usage: container_name physics_volumes container_volumes"
    echo "Example: I want mount physics /tmp/test to container /src in test"
    echo "The command is: bash `basename $0` test_container_id /tmp/test /src "
    exit 1
fi
which nsenter &>>/dev/null
if [ $? -ne 0 ];then
    echo "plsease install nsenser,command is:yum install util-linux"
    exit 1
fi
set -e
CONTAINER=$1
HOSTPATH=$2
CONTPATH=$3
if [ ! -d $HOSTPATH ];then
    echo "physics $HOSTPATH is not exist!"
    exit 1
fi
REALPATH=$(readlink --canonicalize $HOSTPATH)
FILESYS=$(df -P $REALPATH | tail -n 1 | awk '{print $6}')
while read DEV MOUNT JUNK
    do
        [ $MOUNT = $FILESYS ] && [ $DEV != "rootfs" ] && break
    done </proc/mounts
[ $MOUNT = $FILESYS ] # Sanity check!
while read A B C SUBROOT MOUNT JUNK
    do [ $MOUNT = $FILESYS ] && break
    done < /proc/self/mountinfo
[ $MOUNT = $FILESYS ] # Moar sanity check!
SUBPATH=$(echo $REALPATH | sed s,^$FILESYS,,)
DEVDEC=$(printf "%d %d" $(stat --format "0x%t 0x%T" $DEV))
PID=$(docker inspect --format "{{.State.Pid}}" "$CONTAINER")
run_command="nsenter --target $PID --mount --uts --ipc --net --pid -- sh -c"
if  [ `$run_command "mount|grep $CONTPATH|wc -l"` -ne 0 ];then
    echo "container $CONTAINER mount dir $CONTPATH is mounting!"
    exit 1
fi
$run_command "[ -b $DEV ] ||mknod --mode 0600 $DEV b $DEVDEC"
$run_command "mkdir /tmpmnt"
$run_command "mount $DEV /tmpmnt"
$run_command "mkdir -p $CONTPATH"
$run_command "mount -o bind /tmpmnt/$SUBROOT/$SUBPATH $CONTPATH"
$run_command "umount /tmpmnt"
$run_command "rmdir /tmpmnt"
check_result=`$run_command "mount|grep $CONTPATH|wc -l"`
if [ $check_result -ne 0 ];then
    echo "dymainc mount physics $HOSTPATH on $CONTAINER $CONTPATH is success!"
else
    echo "dymaninc mount physics $HOSTPATH on $CONTAINER $CONTPATH is fail!"
fi

使用方法:

./dynamic_mount_docker_volume.sh master /root/hive/apache-hive-3.1.1 /opt/apache-hive-3.1.1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容