用只读FS在Docker中运行Mongo

为了安全起见,我想根据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的卷。

但是,这是一个很好的做法,为卷添加每条path? 还有其他一些path要添加吗? 像一些日志path等?

有没有Mongodb的列表?

TL; DR案例

你不需要只读容器,你应该只保留你的用户作为非主机的根目录,只装载你真正需要的dirs,并且只能为已安装的目录pipe理许可。

完整答案

从官方的mongo docker镜像和docker的 最佳使用实践中更容易和方便的情况是使用gosu。 在这种情况下,您的MongoDB将由非root用户运行,应该足够安全。

从主机到容器未挂载的所有目录都不会受到容器到主机的影响。 举个例子,即使你删除了系统的根目录,但是它不会影响主目录(但是它会影响所有已安装的目录,所以如果你决定自己尝试,请小心)。

另外对于MongoDB /data/db目录来说,所有的db信息都存放在这个目录中,所有信息都是“模式”等等,所以当它处于只读模式时,mongodb在任何情况下都不起作用。 这就是为什么你可以看到chown -R mongodb:mongodb /data/db lines befor mongodb start from docker-entrypoint.sh from official mongodb docker image。