2016-06-21 10 views
1

私はWindowsでdockerを使用しており、srcディレクトリはmounted as a network share inside the docker container(COPYではなく)です。したがって、ドッカー内の/var/app/serverは、実際にはホスト上の実際の場所がC:\...project\serverのネットワーク共有です。 [sidenote、私はドッカーがLinux上でどのように動作するかに精通していません、それはLinux上でもマウントするためにネットワーク共有を使いますか?なぜなら、これはちょうどかもしれない場合は、Windowsの問題]ホストディレクトリをネットワーク共有としてマウントすると、windowsホスト上のdockerコンテナからbabel-watchが機能しない

私はそれがドッキングウィンドウコンテナ(VM)内で実行しているので、そのネットワーク共有にはmkfifoは、ファイル・パイプを作成することはできませんmkfifoを使用し、バベル-時計を使用していますディレクトリ。 [追記:バベルウォッチ実際mkfifo.exe有用性を持っているのcygwinとのドッキングウィンドウの外窓の著作ん]

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? 

がこれに任意の回避策はありますか?

は、私は(それはまだドッキングウィンドウコンテナの領域の内側になります) /var/appまたはその代わりに /varでファイルを作成はmkfifo持って editing babel-watch sourceを試してみましたが、このよう mkfifoが実際に動作しながら、ファイルの変更はbabel-で見られません時計。基本的には、ファイル変更情報が /var/app(ドッカー内の実際のディレクトリ)にネットワーク共有バリア( /var/app/server(マウントポイント))を渡すことができないと推測します。

答えて

1

mkfifoはLinux/OSX環境が必要ですが、/var/app/serverはWindowsからマウントされています。それはうまくいかない。ですから、マウントボリュームの代わりにADDまたはCOPYする必要があります

1

最近この問題に遭遇し、少し掘り下げました。

(執筆時点で)babel-watch sourceを調べると、OSの一時ディレクトリに名前付きパイプを作成しようとしているのがわかります。私たちのドッキングウィンドウコンテナで

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 

は一緒にこれら二つを使用して、私たちは、Windows用ドッカーにドッキングウィンドウコンテナからバベル-時計を使用することができました。

関連する問題