我将 MongoDB 作为 docker 容器当我重新启动服务器并尝试启动容器时,它会永远重新启动。
我得到的容器日志如下
主要问题是
Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted
我找到了很多解决这个问题的方法,但它们都是基于我使用 mongod 服务的想法,这不是我的情况。
我使用的是 docker 容器,在该容器运行之前我无法在此容器上运行命令。遗憾的是,此错误不会让容器启动并不断重新启动。
我从 MongoDB 3.6 版本开始在官方 bug tracker 上发现了issue,但也没有任何解决方案。
我还在 DigitalOcean 支持上发现了类似的问题,但没有找到解决方案。
警告!! 当您创建 MogoDB 容器时,您应该始终使用
将容器内的目录/data/db
链接到主机上。Volumes
如果
/data/db
未链接到卷,您将丢失数据。
尝试使用
docker stop <container>
停止容器
然后使用
docker rm <container>
将其完全删除
然后使用
docker build
或 docker-compose build
重新构建取决于您的使用情况
注意:每当您删除容器时,它的数据都会随之删除。因此,请确保您有数据库的最新备份。
我想知道近两年后,除了“删除并重新创建”之外,怎么没有好的答案。
假设您的 MongoDB 容器的服务名称是
mongo
,您使用的图像标签是 4.4.18
。
在您的项目路径下创建目录
docker/mongo
,放置您的 docker-compose.yml
。
创建 可执行文件
docker/mongo/entrypoint.sh
,内容为:
#!/bin/sh
if [ -z "$@" ];
then
echo "Remove leftover socket file"
rm /tmp/*.sock
echo "Running mongo"
mongod
else
eval $@
fi
创建
docker/mongo/Dockerfile
,内容为:
FROM mongo:4.4.18
COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
修改 docker-compose.yml 文件,删除
image:
并添加 build:
:
services:
mongo:
build: docker/mongo
启动
docker-compose up
,就完成了。
我遇到了这个问题,我先用
docker-compose down
解决,然后用docker-compose up
解决。
这个问题可能是因为你的docker容器坏了
我在使用 docker compose 运行 Overleaf 时遇到了这个问题。对我来说,这个问题并不是通过把容器拿下来然后再重新拉起来来解决的。
对我有用的是删除 mongod.lock 文件,然后重新启动。对于 Overleaf,该文件存储在
./overleaf-toolkit/data/mongo/mongod.lock
中。
这么多愚蠢的、无关紧要的答案!难以置信!
问题是 mongo 默认监听 unix 套接字,而 macos 内核对 unix 套接字有不同的想法,不像正常的内核。所以你需要专门禁用它:
command: >
--nounixsocket
--bind_ip 127.0.0.1