2017-11-13 9 views
1

도커 컨테이너에있는 내 프로그램은 FileSystemWatcher를 사용하여 로컬 폴더를 모니터링합니다.Docker 내의 FileSystemWatcher가 로컬 디렉토리에 대한 변경을 알지 못합니다.

도커 실행 -v/c/사용자/지원/데스크톱 /받은 편지함 :/사용자/지원/데스크톱 /받은 편지함 -v/c/사용자/지원/데스크톱/보낼 편지함/사용자/support/Desktop/outbox -it --name workbeanRun workbean

Docker Exec을 사용하여 실행중인 컨테이너를 조사했습니다. 받은 편지함 및 보낼 편지함 디렉토리와 그 안에있는 파일을 볼 수 있습니다. 그러나받은 파일 함으로 새 파일을 보내면 FileSystemWatcher 이벤트가 실행되지 않습니다. 도커 컨테이너를 사용하지 않으면 잘 동작하기 때문에 코드에는 아무런 문제가 없습니다.

지시서를 장착 할 때 필요한 다른 것이 있습니까? 또는 FileSystemWatcher가 컨테이너 내부에서도 가능합니까?

좋아, 요청에 따라, 여기에 프로그램이 있습니다 :

내 로컬 드라이브의받은 편지함 폴더 컨테이너의받은 편지함 폴더에 묶여 :

using System; 
using System.IO; 

namespace workbean 
{ 
    class Program 
    { 
     FileSystemWatcher watcher = new FileSystemWatcher(); 
     static string sourceDir = "/Users/Support/Desktop/inbox"; 
     static string destDir = "/Users/Support/Desktop/outbox"; 


     static void Main(string[] args) 
     { 
      Console.WriteLine("Testing..."); 

      Program p = new Program(); 

      while (true) { } 
     } 


     public Program() 
     { 
      watcher.Path = sourceDir; 
      watcher.Filter = "*.*"; 
      watcher.Created += new FileSystemEventHandler(OnCreated); 
      watcher.EnableRaisingEvents = true; 

     } 


     static void OnCreated(object source, FileSystemEventArgs e) 
     { 

      string[] files = Directory.GetFiles(sourceDir); 
      foreach (var item in files) 
      { 
       string destDir2 = destDir + "/" + Path.GetFileName(item); 
       File.Move(item, destDir2); 
      } 

     } 


    } 
} 
+0

코드를 보지 않고도 사용자가 무엇을하고 있는지 정확히 알기가 어렵습니다. – MethodMan

답변

0

이 무슨 일이 일어나고있는 것 같습니다. 파일을 하나에 추가하면 다른 파일에 나타납니다.

그러나 FileSystemWatcher는 컨테이너의받은 편지함 만 모니터링합니다. 컨테이너의받은 편지함에 파일을 추가하면 FileSystemWatcher가 이벤트를 발생시킵니다.

그러나 로컬받은 편지함에 파일을 추가 할 때 FileSystemWatcher가 두 폴더가 서로 묶여 있어도 모니터링하지 않으므로 아무런 반응이 없습니다.