![](/img/trans.png)
[英]Docker: How to volume map data from host to container (mongo) in using docker-compose
[英]How to set docker mongo data volume
我想使用 Dockerizing MongoDB 並將數據存儲在本地卷中。
但是……失敗了……
它有mongo:latest
images
kerydeMacBook-Pro:~ hu$ docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
mongo latest b11eedbc330f 2 weeks ago 317.4 MB
ubuntu latest 6cc0fc2a5ee3 3 weeks ago 187.9 MB
我想將單聲道數據存儲在~/data
。 所以 - -
kerydeMacBook-Pro:~ hu$ docker run -p 27017:27017 -v ~/data:/data/db --name mongo -d mongo
f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43
但是......它不起作用......
docker ps -- 沒有守護進程 mongo
kerydeMacBook-Pro:~ hu$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
嘗試運行“mongo”——失敗
kerydeMacBook-Pro:~ hu$ docker exec -it f57 bash
Error response from daemon: Container f57 is not running
碼頭工人檢查mongo
kerydeMacBook-Pro:~ hu$ docker inspect mongo
[
{
"Id": "f570073fa3104a54a54f39dbbd900a7c9f74938e2e0f3f731ec8a3140a418c43",
"Created": "2016-02-15T02:19:01.617824401Z",
"Path": "/entrypoint.sh",
"Args": [
"mongod"
],
"State": {
"Status": "exited",
"Running": false,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 0,
"ExitCode": 100,
"Error": "",
"StartedAt": "2016-02-15T02:19:01.74102535Z",
"FinishedAt": "2016-02-15T02:19:01.806376434Z"
},
"Mounts": [
{
"Source": "/Users/hushuming/data",
"Destination": "/data/db",
"Mode": "",
"RW": true
},
{
"Name": "365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a",
"Source": "/mnt/sda1/var/lib/docker/volumes/365e687c4e42a510878179962bea3c7699b020c575812c6af5a1718eeaf7b57a/_data",
"Destination": "/data/configdb",
"Driver": "local",
"Mode": "",
"RW": true
}
],
如果我不設置數據量,mongo image 可以工作!
但是,在設置數據量時,它不能。 誰能幫我?
嘗試檢查docker 日志以查看當容器停止並進入“現有”模式時發生了什么。
另請參閱指定卷的完整路徑是否有幫助:
docker run -p 27017:27017 -v /home/<user>/data:/data/db ...
OP補充說:
docker logs mongo
exception in initAndListen: 98
Unable to create/open lock file: /data/db/mongod.lock
errno:13 Permission denied
Is a mongod instance already running?
terminating 2016-02-15T06:19:17.638+0000
I CONTROL [initandlisten] dbexit: rc: 100
errno:13 是問題 30的內容。
此評論補充說:
這是一個文件所有權/權限問題(與此 docker 映像無關),無論是在 VB 中使用 boot2docker 還是在 VB 中使用 vagrant box。
盡管如此,我還是設法破解了所有權,將 boot2docker 中的 /Users 共享卷重新掛載到 uid 999 和 gid 999(這是 mongo docker 映像使用的內容)並啟動它:
$ boot2docker ssh
$ sudo umount /Users
$ sudo mount -t vboxsf -o uid=999,gid=999 Users /Users
但是... mongod 由於不支持文件系統類型而崩潰(mmap 不適用於 vboxsf)
所以實際的解決方案是嘗試DVC: Data Volume Container ,因為現在mongodb doc提到:
MongoDB 需要一個支持目錄
fsync()
的文件系統。
例如,HGFS 和 Virtual Box 的共享文件夾不支持此操作。
所以:
由於 virtualbox 共享文件夾的工作方式,安裝到 OSX 對 MongoDB 不起作用。
對於 DVC(數據卷容器),請嘗試docker volume create
:
docker volume create mongodbdata
然后將其用作:
docker run -p 27017:27017 -v mongodbdata:/data/db ...
看看是否效果更好。
一個docker volume inspect mongodbdata
(請參閱docker volume inspect mongodbdata
docker volume inspect
)會給你它的路徑(如果你需要,你可以備份)
截至 2017 年夏季,本地卷不被視為最佳實踐。
每個Docker 文檔:
卷是持久化 Docker 容器生成和使用的數據的首選機制。
docker volume create mongodbdata
docker run -p 27017:27017 -v mongodbdata:/data/db mongo
通過 Docker Compose:
version: '2'
services:
mongodb:
image: mongo:latest
volumes:
- ./<your-local-path>:/data/db
/data/db
是保存在容器上的數據的位置。
<your-local-path>
是您機器上的位置,也就是將保存實際數據庫日志文件的主機。
對於在Windows上運行的MongoDB容器的任何一個:所描述這里,那里當你使用路徑(我們稱之為從Windows主機裝配卷到MongoDB的容器是一個問題local volume
)。
您可以使用Docker volume
(由 Docker 管理的卷)來解決這個問題:
docker volume create mongodata
或者使用docker-compose
作為我的偏好:
version: "3.4"
services:
....
db:
image: mongo
volumes:
- mongodata:/data/db
restart: unless-stopped
volumes:
mongodata:
在 Windows 10 上測試過,它可以工作
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.