问题描述:
通过docker-compose部署的jayfong/yapi + mongo镜像,但mongodb容器一直启动不起来,通过docker logs查看日志找到error处:
“msg”:“Error setting up listener”,“attr”:{“error”:{“code”:9001,“codeName”:“SocketException”,“errmsg”:“Permission denied”}}
问题排查:
通过搜索这个报错信息,大部分帖子都说的是mongodb启动时,会在/tmp下生成mongodb-xxx.sock的文件,没权限导致的报错,但docker部署的很少;
最终通过这篇帖子找到与我相似之处并且得到解决:
https://github.com/mbentley/docker-omada-controller/issues/138
问题解决:
我的部署情况和上述帖子的情况一致,由于磁盘空间问题,曾经修改过docker默认的存储路径(修改前没这个问题,修改后出现这个问题),
而修改 Docker 默认路径可能会导致权限问题,特别是涉及到容器内部的路径。这是因为 Docker 在设置容器内部路径权限时,可能会使用默认路径来计算权限。当你修改了 Docker 默认路径,容器内部的路径权限设置可能与实际不符,从而导致权限问题。
在明确了容器内部路径权限问题的情况下,我是这么解决的:
1.在某个路径下创建 tmp 文件夹供容器挂载,并且赋予文件夹足够的权限:chmod 777 /xxx/xxx/tmp
2.修改docker-compose.yml,添加mongodb的挂载,将容器内部的/tmp挂载在创建的文件夹上
再次启动一切正常。