【问题标题】:How to store MongoDB data with docker-compose如何使用 docker-compose 存储 MongoDB 数据
【发布时间】:2017-06-22 11:24:43
【问题描述】:

我有这个 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) 存储在本地?

它适用于生产(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 程序的“文件共享”部分添加了/data 目录。

是否在生产和开发中使用相同的 docker-compose?我该如何解决这个问题?

【问题讨论】:

    标签: mongodb docker docker-compose


    【解决方案1】:

    其实是反过来的(HOST:CONTAINER),/data/mongodb/db在你的主机上,/data/db在容器里。

    您已在开发机器的共享文件夹中添加了/data,但尚未创建/data/mongodb/db,这就是您收到permission denied 错误的原因。 Docker 无权创建文件夹。

    【讨论】:

      【解决方案2】:

      我的印象是,您需要更多地了解 Docker 的基础知识,才能完全了解自己在做什么。在生产环境中运行 Docker 有很多潜在的陷阱,我的建议是好好学习基础知识,这样你就知道如何处理它们了。

      以下是文档中关于 volumes 的内容:

      [...] 指定主机上的路径 (HOST:CONTAINER)

      所以你搞错了。第一部分是主机上的过去,例如您的本地计算机,第二个是卷安装在容器中的位置。

      关于您的最后一个问题,请看这篇文章:Using Compose in production

      【讨论】:

        【解决方案3】:

        从 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

        【讨论】:

          猜你喜欢
          • 2021-09-09
          • 1970-01-01
          • 1970-01-01
          • 2021-08-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-04-17
          相关资源
          最近更新 更多