# Permissions issue when mounting local folder

**URL:** <https://discourse.jupyter.org/t/permissions-issue-when-mounting-local-folder/24343>\
**Category:** JupyterHub\
**Created:** [March 7, 2024, 9:55am UTC](https://discourse.jupyter.org/t/permissions-issue-when-mounting-local-folder/24343 "2024-03-07T09:55:15Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![pieter](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.jupyter.org/pieter/32/12597_2.png) [@pieter](https://discourse.jupyter.org/u/pieter)\
**Post date:** [March 7, 2024, 9:55am UTC](https://discourse.jupyter.org/t/permissions-issue-when-mounting-local-folder/24343/1 "2024-03-07T09:55:16Z")

</div>

I’m experiencing a permissions issue where the locally mounted `/home/jovyan/work` is owned by `jovyan:users` when I run JupyterHub on my local machine but `root:root` when I run the same configuration on a server. I tried setting `CHOWN_EXTRA` but this has no effect:

```auto
import os

c = get_config() # noqa: F821
c.JupyterHub.spawner_class = "dockerspawner.DockerSpawner"

c.DockerSpawner.image = os.environ["DOCKER_NOTEBOOK_IMAGE"]

network_name = os.environ["DOCKER_NETWORK_NAME"]
c.DockerSpawner.use_internal_ip = True
c.DockerSpawner.network_name = network_name

notebook_dir = os.environ.get("DOCKER_NOTEBOOK_DIR", "/home/jovyan/work")
c.DockerSpawner.notebook_dir = notebook_dir

c.DockerSpawner.environment = {
    "CHOWN_HOME": "yes",
    "CHOWN_EXTRA": "/home/jovyan",
    "CHOWN_EXTRA_OPTS": "-R",
    "NB_UID": 1000,
    "NB_GID": 100,
}

c.DockerSpawner.volumes = {
    os.environ.get("DOCKER_NOTEBOOK_VOLUME"): notebook_dir,
}

c.DockerSpawner.remove = True

c.DockerSpawner.debug = True

c.DockerSpawner.start_timeout = 180

c.JupyterHub.hub_ip = "jupyterhub"
c.JupyterHub.hub_port = 8080

c.JupyterHub.cookie_secret_file = "/data/jupyterhub_cookie_secret"
c.JupyterHub.db_url = "sqlite:////data/jupyterhub.sqlite"

c.JupyterHub.authenticator_class = "nativeauthenticator.NativeAuthenticator"

c.NativeAuthenticator.open_signup = True

admin = os.environ.get("JUPYTERHUB_ADMIN")
if admin:
    c.Authenticator.admin_users = [admin]

```

My compose file looks like this:

```auto
version: "3"

services:
  hub:
    build:
      context: .
      dockerfile: Dockerfile.jupyterhub
      args:
        JUPYTERHUB_VERSION: latest
    restart: always
    image: jupyterhub
    container_name: jupyterhub
    networks:
      - jupyterhub-network
    volumes:
      - "./jupyterhub_config.py:/srv/jupyterhub/jupyterhub_config.py:ro"
      - "/var/run/docker.sock:/var/run/docker.sock:rw"
      - "/data/jupyterhub-data/hub:/data"
    ports:
      - "8000:8000"
    environment:
      JUPYTERHUB_ADMIN: admin
      DOCKER_NETWORK_NAME: jupyterhub-network
      DOCKER_NOTEBOOK_IMAGE: quay.io/jupyter/minimal-notebook
      DOCKER_NOTEBOOK_DIR: /home/jovyan/work
      DOCKER_NOTEBOOK_VOLUME: /data/jupyterhub-data/jupyterhub-user-{username} # jupyterhub-user-{username}

networks:
  jupyterhub-network:
    name: jupyterhub-network

```

---

<div class="post-metadata">

**Author:** ![manics](https://yyz1.discourse-cdn.com/flex031/user_avatar/discourse.jupyter.org/manics/32/85_2.png) [@manics](https://discourse.jupyter.org/u/manics)\
**Post date:** [March 7, 2024, 12:33pm UTC](https://discourse.jupyter.org/t/permissions-issue-when-mounting-local-folder/24343/2 "2024-03-07T12:33:46Z")

</div>

You need to start the singleuser container as root (UID 0), so that it has permissions to run `chown`:  
[https://jupyter-docker-stacks.readthedocs.io/en/latest/using/common.html#docker-options](https://jupyter-docker-stacks.readthedocs.io/en/latest/using/common.html#docker-options)

[https://jupyterhub-dockerspawner.readthedocs.io/en/latest/api/index.html#dockerspawner.DockerSpawner.extra\_create\_kwargs](https://jupyterhub-dockerspawner.readthedocs.io/en/latest/api/index.html#dockerspawner.DockerSpawner.extra_create_kwargs)

```py
c.DockerSpawner.extra_create_kwargs = {
    "user": 0
}

```
