簡體   English   中英

如何使用 docker-compose 存儲 MongoDB 數據

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM