我正在使用Mac OS X上的boot2docker通過docker映像包裝一些科學軟件。並且該軟件(https://github.com/voutcn/megahit.git)使用命名管道(在python代碼,但並不重要)將不同的部分(用C寫成)互相連接。我安裝的臨時文件夾從主機Mac OS X的機器在泊塢窗容器提供刮開區(因爲軟件臨時輸出可能是巨大的),像這樣的東西:在Docker容器文件夾中的命名管道通過boot2docker掛載到mac os x文件系統
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)的Mac OS X具有boot2docker
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