出于安全原因,我想根据5.12启动一个只读fs的Mongo容器。
我有以下docker-compose.yml
:
version: '2'
services:
mongodb:
image: mongo:3.2
command: -f /etc/mongo.conf
volumes:
- ./mongo/mongo.conf:/etc/mongo.conf:ro
- /data/db
user: mongodb
read_only: true
在
docker-compose up
上,它失败,并显示错误Failed to unlink socket file /tmp/mongodb-27017.sock errno:30 Read-only file system
。好。没问题。我可以将
- /tmp
添加到卷中。但这是向卷添加每条路径的良好实践吗?还有其他补充路径吗?像一些日志路径等等?
有来自Mongodb的列表吗?
最佳答案
TL; DR案例
您不需要只读容器,只应将用户保持为主机的非root用户,仅挂载您真正需要的目录,并仅对挂载的目录管理权限。
完整答案
从官方的mongo docker image和best usage practices of docker来看,使用gosu更加容易和方便。在这种情况下,您的MongoDB将由非root用户运行,这应该足够安全。
所有未从主机装载到容器的目录都不会受到容器到主机的影响。例如,即使您在没有安装任何内容的容器内删除系统的根目录,也不会影响主机目录(但是它将影响所有已安装的目录,因此,如果决定自己尝试使用=)
,请务必小心)。
同样,对于MongoDB /data/db
目录,所有数据库信息都存储在该目录中,它写入所有信息“方案”等,因此,当它处于只读模式时,mongodb在任何情况下都将不起作用。这就是为什么您可以从mongodb官方镜像的docker-entrypoint.sh中看到mongodb之前的chown -R mongodb:mongodb /data/db
行的原因。
关于mongodb - 在具有只读FS的Docker中运行Mongodb,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38125172/