如何使用docker-compose存储MongoDB数据
我有这个docker组成:
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-program中的“File Sharing”部分添加了/data
目录。
是否在生产和开发中使用相同的docker构思? 我如何解决这个问题?
实际上是这样(HOST:CONTAINER), /data/mongodb/db
在主机上, /data/db
在容器中。
你已经在你的开发机器的共享文件夹中添加了/data
,但是你还没有创build/data/mongodb/db
,这就是为什么你得到一个permission denied
错误。 Docker没有创build文件夹的权限。
我得到的印象是你需要更多地了解Docker的基本知识,以充分理解你在做什么。 在生产中运行Docker有很多潜在的缺陷,我的build议是非常好的学习基础知识,所以你知道如何处理它们。
以下是文档中关于卷的说明 :
在主机上指定一个path(HOST:CONTAINER)
所以你有错误的方式。 第一部分是主机上的过去,例如您的本地机器,第二部分是容器内容的安装位置。
您看到的错误是由于您的本地计算机上没有/data/mongodb
,并且由于权限而创build该path失败。 为了防止这种情况,请在用户家中使用一个位置,即~/
下的某个位置。
关于你最后的问题,看看这篇文章: 在生产中使用Compose 。