docker run --rm -v /usr/local/bin:/target jpetazzo/nsenter

  

#!/bin/bash
#This script is dynamic mount docker volumens
#Author Deng Lei
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

 

chmod a+x t.sh
. ./t.sh d54b05a35b4b /opt/hail/ /opt/hail/

最新文章

  1. Eclipse换背景色
  2. C++ 栈和堆的区别
  3. 。tar.gz(bz或bz2等)安装
  4. 改造laravel的登录流程,仅使用一个token登录laravel
  5. 随机数组&amp;大数相加
  6. maven入门
  7. hdu 2076
  8. IOS-- UIView中的坐标转换
  9. poj2393
  10. WinDebug 常用命令表【摘】
  11. scrollView顶部空白
  12. tomcat 优化配置 java-8 tomcat-7
  13. LinkedHashMap 源码详细分析(JDK1.8)
  14. 比较两个List是否相等,长度和内容都相等
  15. DBS:CUPhone
  16. 各CF-based tracker中output_sigma_factor取值
  17. 【Luogu4630】【APIO2018】 Duathlon 铁人两项 (圆方树)
  18. [UE4]AWP组合
  19. Java中public、protected、default和private的区别
  20. IIS6.0 IIS7.5应用程序池自动停止的解决方法 搜集整理

热门文章

  1. (原)未能启用约束。一行或多行中包含违反非空、唯一或外键约束的值与DATEADD
  2. Java中设置classpath、path、JAVA_HOME的作用?
  3. Eclipse启动时禁用不必要的验证。
  4. 一、Instrument之Core Animation工具
  5. echarts图形报表缓存问题(option数据缓存)
  6. IDEA java开发 Restful 风格的WebService
  7. javat Itext实践 pdf
  8. Java笔记18:JUnit单元测试
  9. (转)nio 连网和异步 I/O
  10. 爪哇国新游记之七----使用ArrayList统计水果出现次数