MongoDB docker 容器“无法取消链接套接字文件”

问题描述 投票:0回答:5

我将 MongoDB 作为 docker 容器当我重新启动服务器并尝试启动容器时,它会永远重新启动。

我得到的容器日志如下

主要问题是

Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted

我找到了很多解决这个问题的方法,但它们都是基于我使用 mongod 服务的想法,这不是我的情况。

我使用的是 docker 容器,在该容器运行之前我无法在此容器上运行命令。遗憾的是,此错误不会让容器启动并不断重新启动。

我从 MongoDB 3.6 版本开始在官方 bug tracker 上发现了issue,但也没有任何解决方案。

我还在 DigitalOcean 支持上发现了类似的问题,但没有找到解决方案。

mongodb docker digital-ocean
5个回答
5
投票

警告!! 当您创建 MogoDB 容器时,您应该始终使用

/data/db
将容器内的目录
Volumes
链接到主机上。

如果

/data/db
未链接到卷,您将丢失数据。

尝试使用

docker stop <container>

停止容器

然后使用

docker rm <container>

将其完全删除

然后使用

docker build
docker-compose build
重新构建取决于您的使用情况

注意:每当您删除容器时,它的数据都会随之删除。因此,请确保您有数据库的最新备份。


2
投票

我想知道近两年后,除了“删除并重新创建”之外,怎么没有好的答案。

假设您的 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
,就完成了。


0
投票

我遇到了这个问题,我先用

docker-compose down
解决,然后用
docker-compose up
解决。 这个问题可能是因为你的docker容器坏了


0
投票

我在使用 docker compose 运行 Overleaf 时遇到了这个问题。对我来说,这个问题并不是通过把容器拿下来然后再重新拉起来来解决的。

对我有用的是删除 mongod.lock 文件,然后重新启动。对于 Overleaf,该文件存储在

./overleaf-toolkit/data/mongo/mongod.lock
中。


0
投票

这么多愚蠢的、无关紧要的答案!难以置信!

问题是 mongo 默认监听 unix 套接字,而 macos 内核对 unix 套接字有不同的想法,不像正常的内核。所以你需要专门禁用它:

command: >
  --nounixsocket
  --bind_ip 127.0.0.1
© www.soinside.com 2019 - 2024. All rights reserved.