在docker中使用U盘

问题

最初的解决方案是映射host中固定的目录到container中,但是只能把U盘中的数据拷贝到固定的目录中,在container中才可以看到。
如果在container创建前把U盘mount到固定目录,这个也没有问题。
如果在container创建以后,再把U盘mount到固定的目录中,在container中无法看到。

我的需求:

  1. 程序是B/S结构,需要24小时不间断运行
  2. 程序的输入数据从U盘或者移动硬盘中读取
  3. 不依赖host的环境

插个广告:滴滴云,比其他云服务器都便宜,用于测试什么的没有什么大问题,但是用于生产环境要谨慎。这个我的推广链接https://i.didiyun.com/2bxpVi3P0N0

解决

在创建container的时候增加选项--privileged,这样才可以放开docker的所有系统操作权限,但是这种操作带来的安全风险比较大;还有比较安全的方式没有测试,可以参考:
如何在Docker容器内部使用gdb进行debug

在程序中利用inotify监控/dev目录,如果发现有U盘插入,自动mount到一个目录中即可。具体的代码参考网上很多,这里就不重复了。

  • 我尝试使用nfs、samba网络文件系统,似乎也不行。
  • 我也测试了--device的方式,但是设备名称需要在container创建的时候指定,似乎不能支持U盘的热插拔。这样就需要在host中部署一定量的程序,这个和我的应用要求不一样。所以没有深入的测试了。
  • 还可以利用nsenter,做动态的卷映射,这个可以支持U盘的热插拔,但是还是需要在host中部署一定量的程序,对host有一定的依赖,所以也没有摄入的测试了。
  • 也可以尝试使用udev,这个应该是可以解决的,因为这个和inotify的作用一样,都是把内核事件通知到用户空间,但是我简单试了一下,没有通。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值