2016-06-21 5 views
1

Windows에서 도커를 사용하고 있고 src 디렉토리가 mounted as a network share inside the docker container (COPY가 아닌)입니다. 따라서 도커 안에있는 /var/app/server은 실제로 내 호스트의 실제 위치가 C:\...project\server 인 네트워크 공유입니다. [sidenote, 나는 도커가 리눅스에서 어떻게 작동하는지에 익숙하지 않은 것처럼, 리눅스에서 마운트를 위해 여전히 네트워크 공유를 사용하고있는 것처럼? 왜냐하면 그렇지 않다면 이것은 단지 윈도우 문제 일 수도 있기 때문입니다.네트워크 공유로 호스트 디렉토리를 마운트 할 때 windows 호스트의 docker 컨테이너에서 babel-watch가 작동하지 않습니다.

mkfifo을 사용하는 babel-watch를 사용하고 있으며, 도커 컨테이너 (VM) 내에서 실행 중이기 때문에 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 환경이 필요하고 Windows에서는 /var/app/server이 필요합니다. 그래서 그것은 효과가 없습니다. 따라서 또는 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 파일 시스템에서 선택되지 않은 변경 사항의 문제를 해결하지 못했습니다. 변경 사항을 감지하려면 폴링 플래그 --use-polling을 사용할 수 있습니다. 이 명령을한다 :

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

는이 두 가지를 사용하여 우리가 Windows 용 도커에 고정 표시기 컨테이너에서 바벨 시계를 사용하는 것을 허용했다.