[英]Data isn't persisted in the database when using MongoDB with Docker volumes?
有一個使用 mongodb 的服務。 但是當我重新啟動計算機或 docker 機器時,數據庫中沒有存儲任何數據。 docker-compose.yml:
version: "3"
Services:
...
mongodb:
restart: always
image: mongo:latest
environment:
- MONGO_DATA_DIR=/dockerdata/db
volumes:
- ./dockerdata/db:/data/db
ports:
- 27017:27017
command: mongod
我嘗試在主機上進行數據庫存儲,但也無濟於事:
docker-compose.yml:
version: "3"
Services:
...
mongodb:
restart: always
image: mongo:latest
environment:
- MONGO_DATA_DIR=/c/users/frol/mongodata/db
volumes:
- /c/users/frol/mongodata/db:/data/db
ports:
- 27017:27017
command: mongod
如果創建命名卷,docker 會寫入錯誤: ERROR: for test_mongodb_1 Cannot create container for service mongodb: fa 掛載本地卷:mount /c/users/frol/mongodata/db:/mnt/sda1/var/lib/ d ocker/volumes/test_mongodata/_data,標志:0x1000:沒有這樣的文件或目錄
docker-compose.yml:
version: "3"
services:
...
mongodb:
restart: always
image: mongo:latest
environment:
- MONGO_DATA_DIR=/c/users/frol/mongodata/db
volumes:
- mongodata:/data/db
ports:
- 27017:27017
command: mongod
volumes:
mongodata:
driver: local
driver_opts:
type: none
device: /c/users/frol/mongodata/db
o: bind
主機 - 已安裝 win 8.1、docker 工具箱 19.03.1。
請幫助我,我是新手。 如何確保數據庫數據不丟失?
如果您只是在撰寫文件中修復一個簡單的錯字,那么您的第一次嘗試將起作用:
version: "3"
services:
...
mongodb:
restart: always
image: mongo:latest
environment:
- MONGO_DATA_DIR=/data/db # changed
volumes:
- ./dockerdata/db:/data/db
ports:
- 27017:27017
command: mongod
但是,由於/data/db
是MONGO_DATA_DIR
的默認值,因此設置它是非常多余的。
但我更喜歡使用命名卷,這樣數據會持續存在,但我不必看到“丑陋”的數據庫存儲文件夾:
version: "3"
services:
...
mongodb:
restart: always
image: mongo:latest
volumes:
- mongodata:/data/db
ports:
- 27017:27017
command: mongod
volumes:
mongodata:
不要設置$MONGO_DATA_DIR
; 將其保留為默認值/data/db
。
services:
mongodb:
restart: always
image: mongo:latest
# No need to specifically set $MONGO_DATA_DIR
volumes:
- ./dockerdata/db:/data/db
ports:
- 27017:27017
# No need to override command:
Docker 容器具有獨立於主機文件系統的文件系統空間。 大多數數據庫的典型設置是將數據庫存儲在容器內的固定位置; 對於 MongoDB 這是/data/db
目錄。 您可以在那里掛載一個命名卷或文件系統路徑,但容器內的代碼不知道其中的區別。
如果您確實設置$MONGO_DATA_DIR
類的環境變量,它們需要反映容器內的路徑; 他們不能直接指定主機系統路徑。 (@ruohola 的答案有效,因為它更改了綁定掛載的容器文件系統路徑以匹配環境變量中的容器文件系統路徑;主機./dockerdata
和容器/dockerdata
路徑完全不相關。)
當您明確定義數據目錄時,您需要 map 卷中的同一目錄以保留數據
version: "3"
services:
...
mongodb:
restart: always
image: mongo:latest
environment:
- MONGO_DATA_DIR=/data/db #data directory
volumes:
- ./dockerdata/db:/data/db #same data directory which you defined above
ports:
- 27017:27017
command: mongod
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.