【发布时间】:2015-11-19 22:30:28
【问题描述】:
我正在使用 Mac OS X 上的 boot2docker 通过 docker 映像包装一些科学软件。该软件 (https://github.com/voutcn/megahit.git) 使用命名管道(在 python 代码中,但这并不重要)连接不同的部分(编写在 C) 中彼此。我从主机 Mac OS X 机器挂载临时文件夹以在 docker 容器中提供暂存区(因为软件的临时输出可能很大),如下所示:
docker run -v /external/folder:/tmp/scratch <image> <args>
它给了我容器内的这条挂载线:
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
【问题讨论】:
标签: macos docker named-pipes boot2docker