Mongodb Can';不能使用docker命令启动mongo,但可以在容器内使用/bin/bash(使用数据卷)
此Mongodb Can';不能使用docker命令启动mongo,但可以在容器内使用/bin/bash(使用数据卷),mongodb,macos,docker,docker-compose,docker-volume,Mongodb,Macos,Docker,Docker Compose,Docker Volume,此docker compose.yml: services: database: image: mongo:3.2 ports: - "27017" command: "mongod --dbpath=/usr/database" networks: - backend volumes: - dbdata:/usr/database volumes: dbdata: 导致此错误的原因(被剪断): 对于直接使用
docker compose.yml
:
services:
database:
image: mongo:3.2
ports:
- "27017"
command: "mongod --dbpath=/usr/database"
networks:
- backend
volumes:
- dbdata:/usr/database
volumes:
dbdata:
导致此错误的原因(被剪断):
对于直接使用该图像在容器中运行命令,同上:
$ docker run -v /usr/database mongo:3.2 mongod --dbpath=/usr/database
但是,如果在启动容器时运行/bin/bash
,然后启动mongo
,我们就可以:
$ docker run -it -v /usr/database mongo:3.2 /bin/bash
root@8aab722fad89:/# mongod --dbpath=/usr/database
根据输出,区别似乎是在第二个场景中,命令以root用户身份运行
因此,我的问题是:
/bin/bash
方法有效,而其他方法无效/bin/bash
方法有效,而其他方法无效
这个答案是基于。首先要指出的是,您的卷装载命令-v/usr/database
,实际上是在容器中创建一个具有root所有者权限的目录
下面的命令失败,权限被拒绝,因为docker映像正在以用户mongodb
的身份运行该命令(请参阅)。因为目录/usr/database
属于root
$ docker run -v /usr/database mongo:3.2 mongod --dbpath=/usr/database
如果在下面执行/bin/bash
,则手动运行mongod
:
$ docker run -it -v /usr/database mongo:3.2 /bin/bash
您以root
身份登录并以root
身份执行mongod
,并且它有权在/usr/database/
中创建数据库文件
此外,如果您正在执行下面的行,它会起作用,因为您指向的是一个目录/data/db
,用户mongodb
的权限已被更正(请参阅)
我如何在docker compose中复制这个原因
最简单的解决方案是使用命令:“mongod--dbpath=/data/db”
,因为Dockerfile中已更正了权限所有权
如果您打算使用主机卷,可能需要在主机OSX上添加
mongodb
user并更改相应的目录权限。修改卷装载的权限所有权超出的范围 因此,这并没有回答我的问题,但确实解决了我的根本问题:docker run-v db:/data/db mongo:3.2
你的Dockerfile
对于imagemongo:3.2
包含什么?如果在文件末尾使用了ENTRYPOINT
mongod
,则您将docker start命令加倍。mongo:3.2
是官方的mongo映像。我没有成功。你有没有在docker compose或类似的东西中尝试过命令:“/bin/bash-c'mongod--dbpath=/usr/database”
?没有内部记号-这可能是我缺少的。好吧,我想这是我(非常好,谢谢)的答案。为了澄清,如果我想在图像中使用/data/db
以外的位置,我需要制作一个其他位置具有正确权限的图像?正确,如果你想在图像(内部)中使用/data/db
以外的位置,你需要修改mongodb
用户的权限。如果要使用映像外部的位置(即主机卷),则需要在主机上添加用户mongodb
,然后映射权限(guid),以便容器的mongodb
用户能够使用该外部卷。
$ docker run -it -v /usr/database mongo:3.2 /bin/bash
$ docker run -v db:/data/db mongo:3.2