2016-06-21 67 views
1

我在Windows上使用docker,並且我的src目錄是mounted as a network share inside the docker container(與COPY相對)。因此Docker內部的/var/app/server實際上是一個網絡共享,其在我的主機上的實際位置是C:\...project\server。 [旁註,我不熟悉docker如何在Linux上工作,就像它仍然使用網絡共享在Linux上掛載一樣?因爲如果不是那麼這可能只是Windows問題]將主機目錄作爲網絡共享掛載時,babel-watch無法從Windows主機上的Docker容器工作

我使用babel-watch使用mkfifo,並且因爲它在docker容器(VM)內部運行mkfifo無法在該網絡共享中創建文件管道目錄。 [旁註:巴貝爾手錶實際上確實在Windows上運行外泊塢窗使用Cygwin具有mkfifo.exe實用]

server_1 | mkfifo: cannot create fifo `/var/app/server/116521-16-pz2v9g.ma216skyb9': Operation not permitted 
server_1 | Unable to create named pipe with mkfifo. Are you on linux/OSX? 

有任何解決方法這樣做呢?

我試圖editing babel-watch source有mkfifo在/var/app/var代替(它仍然是泊塢窗容器的境界裏)創建一個文件,而這種方式mkfifo實際工作,文件的更改不會被babel-看到看。我猜根本上文件更改信息無法傳播通過網絡共享障礙 - /var/app/server(掛載點)到/var/app(docker內的真實目錄)。

回答

1

mkfifo需要Linux/OSX環境,而/var/app/server是從Windows安裝的。所以它不起作用。所以你應該ADDCOPY而不是掛載量

1

我最近遇到這個問題,並做了一點挖掘。

如果你看看babel-watch source(寫作的時候),你會發現它試圖在操作系統的臨時目錄中創建命名管道。

function generateTempFilename() { 
    const now = new Date(); 
    return path.join(os.tmpdir(), [ 
    now.getYear(), now.getMonth(), now.getDate(), 
    '-', 
    process.pid, 
    '-', 
    (Math.random() * 0x100000000 + 1).toString(36), 
    ].join('')); 
} 

在我們的碼頭工人集裝箱$TMPDIR是沒有設置導致在當前工作目錄中創建的命名管道。設置它改變了這一點:

TEMP_DIR=/tmp babel-watch index.js 

這意味着mkfifo呼叫並非針對Windows文件系統。但是這並沒有解決在Windows文件系統上沒有選擇更改的問題。要檢測更改,可以使用輪詢標誌--use-polling。這使得命令:

TEMP_DIR=/tmp babel-watch --use-polling index.js 

一起使用這兩個允許我們使用Docker for Windows中的docker容器中的babel-watch。

相關問題