加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

macos – 通过boot2docker挂载到mac os x文件系统的docker容器

发布时间:2020-12-16 03:26:53 所属栏目:安全 来源:网络整理
导读:我正在使用Mac OS X上的boot2docker通过docker image包装一些科学软件.该软件(https://github.com/voutcn/megahit.git)使用命名管道(在python代码中,但并不重要)将不同的部分(用C语言编写)连接到每个其他.我从主机Mac OS X机器挂载临时文件夹,在docker容器中

我正在使用Mac OS X上的boot2docker通过docker image包装一些科学软件.该软件(https://github.com/voutcn/megahit.git)使用命名管道(在python代码中,但并不重要)将不同的部分(用C语言编写)连接到每个其他.我从主机Mac OS X机器挂载临时文件夹,在docker容器中提供临时区域(因为软件的临时输出可能很大),如下所示:

docker run -v /external/folder:/tmp/scratch 

它给了我在容器内的这个挂载线:

none on /tmp/scratch type vboxsf (rw,nodev,relatime)

在这个挂载的文件夹中,名为管道创建在容器内运行时失败.它甚至与python,C或任何特定语言无关.我在这个文件夹中使用linux命令mkfifo pipe1进行了双重检查,并显示错误:

mkfifo: cannot create fifo 'pipe1': Operation not permitted

它适用于容器内任何内部未安装的文件夹.为什么会发生这种情况又如何解决?

PS:这是我轻松重现问题的方法.

1)带有boot2docker的Mac OS X.

2)Dockerfile是:

FROM ubuntu:14.04
#WORKDIR /tmp <- this one would work
WORKDIR /tmp/scratch
ENTRYPOINT [ "mkfifo" ]
CMD [ "pipe1" ]

3)图像构建:

docker build --rm -t mine/namedpipes:latest .

4)运行(在要安装的外部主机文件夹中):

docker run -v $(pwd):/tmp/scratch mine/namedpipes:latest
最佳答案
升级到最新版本的Docker for Mac,您的问题可能会得到解决:https://docs.docker.com/docker-for-mac/release-notes/#beta-2-release-2016-03-08-1102-beta2

问题是FIFO实际上是您使用文件系统访问的内核对象,因此您需要额外的工作来支持跨内核FIFO(或unix域套接字) – fifo在运行docker守护程序的Linux guest虚拟机中有效或者在OS X主机,而不是两者都有,而且你无法从linux盒子里面创建一个OS X fifo.这有点像尝试在网络驱动器上创建fifo,它作为本地IPC机制没有意义.

目前对特殊文件的支持详见https://docs.docker.com/docker-for-mac/osxfs/#file-types

跨管理程序支持的问题位于https://github.com/docker/for-mac/issues/483

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读