![](/img/trans.png)
[英]How can one import data into a mongodb service in docker-compose
[英]How to store MongoDB data with docker-compose
我有這個 docker-compose:
version: "2"
services:
api:
build: .
ports:
- "3007:3007"
links:
- mongo
mongo:
image: mongo
volumes:
- /data/mongodb/db:/data/db
ports:
- "27017:27017"
卷/data/mongodb/db:/data/db
是數據存儲在圖像內的第一部分 ( /data/mongodb/db
) 和本地存儲/data/db
的第二部分 ( /data/db
)?
它適用於生產(ubuntu),但是當我在我的開發機器(mac)上運行它時,我得到:
ERROR: for mongo Cannot start service mongo: error while creating mount source path '/data/mongodb/db': mkdir /data/mongodb: permission denied
即使我以 sudo 身份運行它。 我在 mac 上的 docker-program 的“文件共享”部分中添加了/data
目錄。
在生產和開發中使用相同的 docker-compose 的想法是什么? 我該如何解決這個問題?
實際上是相反的(HOST:CONTAINER), /data/mongodb/db
在你的主機上, /data/db
在容器中。
您已將/data
添加到開發機器的共享文件夾中,但尚未創建/data/mongodb/db
,這就是您收到permission denied
錯誤的原因。 Docker 無權創建文件夾。
我的印象是,您需要更多地了解 Docker 的基礎知識,才能完全了解您在做什么。 在生產中運行 Docker 有很多潛在的陷阱,我的建議是好好學習基礎知識,這樣你就知道如何處理它們。
以下是文檔中關於卷的內容:
[...] 指定主機上的路徑 (HOST:CONTAINER)
所以你的方法是錯誤的。 第一部分是主機上的過去,例如您的本地機器,第二部分是卷安裝在容器中的位置。
關於您的最后一個問題,請查看這篇文章:在生產中使用 Compose 。
從 Docker-Compose 語法版本 3.2 開始,您可以使用卷屬性的長語法來指定卷的類型。 這允許您創建一個“綁定”卷,它有效地將文件夾從容器鏈接到主機中的文件夾。
這是一個例子:
version : "3.2"
services:
mongo:
container_name: mongo
image: mongo
volumes:
- type: bind
source: /data
target: /data/db
ports:
- "42421:27017"
source
是主機中的文件夾, target
是容器中的文件夾
此處提供更多信息: https : //docs.docker.com/compose/compose-file/#long-syntax
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.