zoukankan      html  css  js  c++  java
  • 如何nsenter,docker-enter给已经启动的docker容器挂载文件?

    脚本如下:

    #!/bin/bash
    set -ex
    
    useage(){
        echo "useage:"
        echo "  dockermnt.sh CONTAINER HOSTPATH CONTPATH"
    }
    
    if [ $# -ne 3 ];then
        useage
        exit
    fi
    
    CONTAINER=$1
    HOSTPATH=$2
    CONTPATH=$3
    
    REALPATH=$(readlink --canonicalize "$HOSTPATH")
    FILESYS=$(df -P "$REALPATH" | tail -n 1 | awk '{print $6}')
    
    while read -r DEV MOUNT JUNK
    do [ "$MOUNT" = "$FILESYS" ] && break
    done </proc/mounts
    [ "$MOUNT" = "$FILESYS" ] # Sanity check!
    
    while read -r 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))
    
    docker-enter "$CONTAINER" sh -c 
    	     "[ -b $DEV ] || mknod --mode 0600 $DEV b $DEVDEC"
    docker-enter "$CONTAINER" mkdir /tmpmnt
    docker-enter "$CONTAINER" mount "$DEV" /tmpmnt
    docker-enter "$CONTAINER" mkdir -p "$CONTPATH"
    docker-enter "$CONTAINER" mount -o bind "/tmpmnt/$SUBROOT/$SUBPATH" "$CONTPATH"
    docker-enter "$CONTAINER" umount /tmpmnt
    docker-enter "$CONTAINER" rmdir /tmpmnt
    

    使用方法:

    dockermnt.sh CONTAINER HOSTPATH CONTPATH
    
  • 相关阅读:
    JavaScript对象继承的实现
    Redis资料
    Difference between LINQ to SQL and the Entity Framework
    闭包,懂不懂由你,反正我是懂了
    Castle资料
    csu 1242 碱基配对
    csu 1242 碱基配对——一个错误的解答
    [转载]zoj 分类
    计算素数
    魔方阵
  • 原文地址:https://www.cnblogs.com/futuretea/p/11996167.html
Copyright © 2011-2022 走看看