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