2016-01-26 22 views
2

我想我的Windows機器上運行docker-compose旋轉了的MongoDB實例和僅數據容器,其代理的連接量包含數據庫文件的碼頭工人無法通過附着量開始MongoDB的數據,僅容器

mongodata: 
    image: mongo:2.6.8 
    volumes: 
    - ./data/db:/data/db 
    command: --break-mongo 
mongo: 
    image: mongo:2.6.8 
    volumes_from: 
    - mongodata 
    ports: 
    - "27017:27017" 
    command: --smallfiles --rest 

* p.s。在--break - 蒙戈命令是在有目的,它只是需要創建卷

據我瞭解,使用data-only容積模式將處理權限問題,但蒙戈容器啓動過程中,我可以看到以下錯誤:

[0m2016-01-26T00:23:52.340+0000 [initandlisten] info preallocateIsFaster couldn't run due to: couldn't open file /data/db/journal/tempLatencyTest for writing errno:1 Operation not permitted; returning false 
[0m2016-01-26T00:23:52.341+0000 [initandlisten] Unable to remove temporary file due to: boost::filesystem::remove: Text file busy: "/data/db/journal/tempLatencyTest" 
[0m2016-01-26T00:23:52.344+0000 [initandlisten] exception in initAndListen: 13516 couldn't open file /data/db/journal/j._0 for writing errno:1 Operation not permitted, terminating 

因此,我無法在本地機器上使用MongoDb和卷。有沒有解決這個問題的方法?

回答

1

documentation狀態

如果您使用的是Mac或Windows泊塢窗機,你的碼頭工人守護 只有你的OS X或Windows文件系統的有限訪問。 Docker 機器嘗試自動共享您的/ Users(OS X)或C:\ Users(Windows) 目錄。所以,你可以在OS X上使用安裝文件或目錄。

docker run -v /Users/<path>:/<container path> ...

在Windows上,使用安裝目錄:

docker run -v /c/Users/<path>:/<container path> ...

所有其他路徑都來自虛擬機的文件系統。例如,如果您使用VirtualBox的某個其他文件夾可用於共享,您需要 做做額外的工作。 對於VirtualBox,您需要將 主機文件夾作爲VirtualBox中的共享文件夾提供。然後,您可以使用Docker -v標誌掛載它,即 。

基本上,無論是儘量給您C:\Users文件夾開頭的完整路徑,如上圖所示,或者如果你不能擁有,使主機文件夾在VirtualBox中的共享文件夾。

更新

沒有必要給一個完整路徑。 docker-compose將處理該問題。您必須確保您的docker-compose.yml位於Users文件夾的內部(在某處)。它不能位於某個根文件夾中。如果您已經這樣做了,那麼您將不得不調整您的權限。只需授予該文件夾的完全權限。

+0

的'data'目錄是直接我'C下:\ users'目錄。我不確定我應該在哪裏設置權限。據我的理解,「data-only」卷'mongodata'應該給''mongo'容器的'/ data/db'路徑提供完全權限?如果不是,我怎麼知道'UID' /'GID'用於權限? – Ropstah

+0

我接受它缺乏更好的答案。但我仍然無法運行附帶卷Mongo ... – Ropstah

0

更新:查看latest Docker for Windows and MacOS X

更快,更可靠:沒有更多的VirtualBox!泊塢窗發動機 在Mac OS X上或在Hyper-V虛擬機在Windows上的xhyve虛擬 機之上的高山Linux發行版上運行,並且VM是 由泊塢應用程序管理。你不需要docker-machine來運行 爲Mac和Windows運行Docker。

注意:如果是Windows,則需要Windows 10 Pro才能使其工作,因爲Hyper-V未包含在其他版本中。

對於泊塢工具箱之前,似乎還有因VirtualBox的沒有解決方案在Windows和OS X。圖像文件確實states

警告(視窗& OS X):在Windows和OS X 默認設置泊塢窗使用的VirtualBox虛擬機來託管泊塢守護進程。不幸的是, 機制的VirtualBox使用主機系統和 泊塢窗容器之間共享文件夾是不兼容的內存映射使用MongoDB中(見vbox bugdocs.mongodb.org及相關 jira.mongodb.org錯誤)文件 。這意味着,這是不可能運行與映射到主機

+0

重新安裝數據/數據庫 - 仍然無法使用該設置(Windows 10和Hyper-V):(。 – Sergiu

0

作爲一個解決方法我剛從一個文件夾複製蒙戈守護進程開始之前的數據目錄 MongoDB的容器。此外,在我的情況下,我不關心日記文件,所以我只複製數據庫文件。

我已經在我的碼頭工人,compose.yml command: bash -c "(rm /data/db/*.lock && cd /prev && cp *.* /data/db) && mongod" 而每次使用此命令回採我用的容器之前: docker exec <container_name> bash -c 'cd /data/db && cp $(ls *.* | grep -v *.lock) /prev'

注:/分組設置爲音量。 path/to/your/prev:/prev

另一種解決方法是使用mongodump和mongorestore。

  • 在泊塢窗,compose.yml:command: bash -c "(sleep 30; mongorestore --quiet) & mongod"
  • 在終端:docker exec <container_name> mongodump

注:我使用的睡眠,因爲我想確保蒙戈啓動,還需要一段時間。

我知道這涉及體力勞動等,但我很高興,至少我得到了與我的Windows 10的機器上運行現有的數據,而且還可以在我的MacBook工作時,我想蒙戈。

(croscopy https://stackoverflow.com/a/42044756/1894856