Search code examples
mongodbdocker-composepermissionsdocker-volume

My local volume for mongodb gets permission denied when running docker-compose up


Here is my docker-compose.yml

version: "3.5"
services:
  api:
    container_name: upvotocracy-api
    restart: always
    build: .
    env_file: .env
    ports:
      - "127.0.0.1:8537:8537"
      - "127.0.0.1:9228:9229"
    links:
      - mongo
    volumes:
      - ./index.js:/usr/src/app/index.js
      - ./.env:/usr/src/app/.env
    networks:
      - upvotocracy-network
  mongo:
    container_name: upvotocracy-mongo
    restart: always
    image: mongo:latest
    env_file: .env
    volumes:
      - ./mongo_data:/data/db
    ports:
      - "127.0.0.1:28016:27017"
    networks:
      - upvotocracy-network
  redis:
    image: redis
    restart: always
    container_name: upvotocracy-cache
    ports:
      - "127.0.0.1:6381:6379"
    networks:
      - upvotocracy-network
  es01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    container_name: upvotocracy-es01
    restart: always
    environment:
      - node.name=es01
      - cluster.name=es-docker-cluster
      - cluster.initial_master_nodes=es01
      - bootstrap.memory_lock=true
      - action.auto_create_index=+*
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./data01:/usr/share/elasticsearch/data
    ports:
      - 127.0.0.1:9201:9200
    networks:
      - upvotocracy-network
networks:
  upvotocracy-network:
    name: upvotocracy-network
volumes:
  mongo_data: {}
  data01:
    driver: local

It only works when I run docker-compose up as root, otherwise I get a permission denied error on ./mongo_data directory which is owned by 999:ubuntu

Pulling mongo ... done
Pulling api   ... done
Pulling redis ... done
Pulling es01  ... done
mongo uses an image, skipping
redis uses an image, skipping
es01 uses an image, skipping
Building api
Traceback (most recent call last):
  File "bin/docker-compose", line 6, in <module>
  File "compose/cli/main.py", line 72, in main
  File "compose/cli/main.py", line 128, in perform_command
  File "compose/cli/main.py", line 303, in build
  File "compose/project.py", line 403, in build
  File "compose/project.py", line 385, in build_service
  File "compose/service.py", line 1106, in build
  File "site-packages/docker/api/build.py", line 160, in build
  File "site-packages/docker/utils/build.py", line 30, in tar
  File "site-packages/docker/utils/build.py", line 49, in exclude_paths
  File "site-packages/docker/utils/build.py", line 214, in rec_walk
  File "site-packages/docker/utils/build.py", line 214, in rec_walk
  File "site-packages/docker/utils/build.py", line 184, in rec_walk
PermissionError: [Errno 13] Permission denied: '/home/ubuntu/data/www/coupondealsavings.com/api/mongo_data/diagnostic.data'
[10551] Failed to execute script docker-compose
Starting coupondeals-mongo ... done
Starting coupondeals-cache ... done
Starting coupondeals-es01  ... done
Starting coupondeals-api   ... done
Connection to xxx closed.

Solution

  • For me I just had to add ./mongo_data to .dockerignore and the Dockerfile would ignore this directory while building api.

    I did this for all my volumes and things work fine now, no permission errors.