繁体   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