2016-06-08 34 views
2

我有以下搬運工,compose.yml泊塢撰寫量不堅持的子文件夾的文件

version: '2' 

services: 
    web: 
    image: user-service-web:${WEB_IMAGE_VER} 
    depends_on: 
     - db 
    environment: 
     NODE_ENV: ${NODE_ENV} 
    networks: 
     user-service: 
     aliases: 
      - user-service-web 
    ports: 
     - "80:3000" 
    restart: always 
    db: 
    image: user-service-mongodb:latest 
    networks: 
     viewster-user-service: 
     aliases: 
      - user-service-mongodb 
    ports: 
     - "27017:27017" 
    restart: always 
    volumes: 
     - mongodb:/data/ 
networks: 
    user-service: 
    driver: bridge 
volumes: 
    mongodb: 

。但令我困惑的是,卷文件夾有2個空文件夾:configdbdb,但裏面沒有數據文件。當我刪除db容器時,它預計會導致數據丟失。

我試圖連接到數據庫容器並在/data文件夾和/data/db文件夾中手動創建文件,並且只有在/data文件夾中創建的文件出現在主機卷文件夾中。 Docker似乎只能在音量設置中指定的文件夾中創建文件或文件夾,但不能在子文件夾中創建文件。我可能是錯的。爲每個需要持久存儲的文件夾創建卷是非常棘手的。有沒有什麼方法可以正確配置我的情況?

環境: 說明:Ubuntu的LTS 14.04.3發佈 :14.04 代號:值得信賴的

泊塢版本: 客戶: 版本:1.11.2 API版本:1.23 轉到版本:go1.5.4 git的承諾:b9f10c9 內置:週三6月1日21時47分50秒2016 OS /拱門:LINUX/AMD64

服務器: 版本:1.11.2 API版本:1.23 轉到版本:go1.5.4 git的承諾:b9f10c9 內置:週三6月1日21時47分50秒2016 OS /拱門:LINUX/AMD64

泊塢撰寫版本 泊塢窗,撰寫版本1.7 .1建立0a9ab35 泊塢窗-PY版本:1.8.1 CPython的版本:2.7.9 OpenSSL的版本:OpenSSL的1.0.1e 2013年2月11日

回答

-1

您創建的MongoDB是一個名爲卷,而不是主機的體積,所以它沒有連接到主機文件。指定的卷將存在於docker內部目錄中。在容器中使用空卷時,它將在該位置收到圖像卷內容的副本。如果您運行docker-compose down -v,它也將被刪除。

如果你想有一個主音量,你需要你的數據庫維護的情況下改變這一行:

volumes: 
    - ./data:/data 

將使用/創建該文件夾的內數據文件夾中運行docker-compose up命令是主機卷安裝在/容器中的數據中。

更新:

作爲證據,命名容器持久化數據,這裏有一個簡單的例子:

bash$ cat docker-compose.yml 
version: '2' 

volumes: 
    testvol: 
    driver: local 

services: 
    testapp: 
    image: busybox 
    entrypoint: "top" 
    volumes: 
     - testvol:/data 

bash$ ../bin/docker-compose up -d 
Creating network "test_default" with the default driver 
Creating volume "test_testvol" with local driver 
Creating test_testapp_1 
bash$ ../bin/docker-compose exec testapp /bin/sh 
/# find /data 
/data 
/# mkdir /data/sub 
/# touch /data/a 
/# touch /data/sub/b 
/# find /data 
/data 
/data/sub 
/data/sub/b 
/data/a 
/# exit 
bash$ ../bin/docker-compose down 
Stopping test_testapp_1 ... done 
Removing test_testapp_1 ... done 
Removing network test_default 
bash$ ../bin/docker-compose up -d 
Creating network "test_default" with the default driver 
Creating test_testapp_1 
bash$ ../bin/docker-compose exec testapp /bin/sh 
/# find /data 
/data 
/data/sub 
/data/sub/b 
/data/a 
/# exit 
+0

創建名爲卷讓我在主機上實現文件在/ var/lib中/泊塢窗/卷/ /_data 所以看起來它已經連接到主機,但是docker只是將數據保存在主機的特殊位置 – Yaroslav

+0

/var/lib/docker是該docker的內部目錄。這不是Docker術語中的主機卷。 – BMitch

+0

但是,無論如何,即使在刪除使用該命名卷的docker容器後,它仍然會使文件持久存在,對嗎? – Yaroslav