Shady Mohamed Sherif
Shady Mohamed Sherif

Reputation: 15759

MongoDB docker container "Failed to unlink socket file"

I have MongoDB as docker container When I restarted the server and tried to start the container it kept restarting forever.

I got the container log as follows

enter image description here

The main problem is Failed to unlink socket file /tmp/mongodb-27017.sock Operation not permitted

I found many solutions to this problem, but all of them are based on the idea that I'm using the mongod service, which isn't my case.

I'm using a docker container and I can't run commands on this container until it is running. Sadly this error doesn't let the container start and keeps restarting.

I found the issue on the official bug tracker of MongoDB since version 3.6, but also it doesn't have any solution.

I also found a similar question on DigitalOcean support with no luck to find a solution.

Upvotes: 6

Views: 5734

Answers (5)

wick
wick

Reputation: 2224

The problem is that mongo listens on unix socket by default and macos kernel has different idea about unix socket, not like sane kernels out there. So you need specifically disable it:

command: >
  --nounixsocket
  --bind_ip 127.0.0.1

Upvotes: -1

Riki_tiki_tavi
Riki_tiki_tavi

Reputation: 916

I'm wondering how after almost 2 years there is no good answer except "remove and create again".

Assume that your service name for the MongoDB container is mongo and the image tag you're using is 4.4.18.

Create directory docker/mongo under your project's path where your docker-compose.yml is placed.

Create executable docker/mongo/entrypoint.sh with contents:

#!/bin/sh

if [ -z "$@" ];
then
    echo "Remove leftover socket file"
    rm /tmp/*.sock

    echo "Running mongo"
    mongod
else
    eval $@
fi

Create docker/mongo/Dockerfile with contents:

FROM mongo:4.4.18

COPY entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]

Modify your docker-compose.yml file, remove image: and add build: instead:

services:
  mongo:
    build: docker/mongo

Launch docker-compose up and you're done.

Upvotes: 3

Stefan
Stefan

Reputation: 1

I ran into this problem when running Overleaf with docker compose. For me the problem was not solved by taking the containers down an bringing them back up again.

What worked for me instead was deleting the mongod.lock file and then restarting. With Overleaf, this file is stored in ./overleaf-toolkit/data/mongo/mongod.lock.

Upvotes: 0

Ramon
Ramon

Reputation: 459

I had this problem and i'd solved with docker-compose down and then docker-compose up. This problem is probably caused because your docker container is broken

Upvotes: 0

Abdelrahman Abdelhamed
Abdelrahman Abdelhamed

Reputation: 152

Warning!! When you create a MogoDB container, You should always link the directory /data/db inside your container to be on the host using Volumes.

In case /data/db isn't linked to a volume, you will lose your data.

Try to stop the container using docker stop <container>

then remove it completely using docker rm <container>

then re-build using docker build or docker-compose build depends on your usage

Note: Whenever you remove the container it's data will be removed along with it. so make sure that you have a recent backup with the database.

Upvotes: 6

Related Questions