我想根据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的列表?
答案 0 :(得分:1)
您不需要只读容器,只应将您的用户保留为主机的非root用户,只挂载您真正需要的目录,并仅为已安装的目录管理permisiions。
来自官方mongo docker image和best usage practices of docker使用gosu更容易和方便的情况。在这种情况下,您的MongoDB将由非root用户运行,这应该足够安全。
从主机到容器未安装的所有目录都不会受到容器到主机的影响。例如,即使您删除了没有安装任何内容的容器内部系统的根,它也不会影响主机目录(但它会影响所有已安装的目录,因此如果您决定自己尝试,请务必小心=)
)。
同样对于MongoDB /data/db
目录,所有存储的db信息都写入所有信息“schemas”等,因此当它处于只读模式时,mongodb在任何情况下都不起作用。这就是为什么你可以从官方mongodb docker图像中看到来自docker-entrypoint.sh的mongodb的chown -R mongodb:mongodb /data/db
行。