'Sharing static folder between backend and nginx containers

I have following Dockerfile

FROM python:3.9
RUN adduser --disabled-password --gecos '' user
WORKDIR /src
COPY . ./
USER user

and docker-compose.yml

  nginx:
    build: ./nginx
    volumes:
      - ./static:/static
      - ./nginx/etc:/etc/nginx/conf.d

  backoffice:
    ...
    container_name: backoffice
    command: bash -c "sh core/run_backoffice.sh"
    volumes:
      - ./core:/src
      - ./static:/static

run_backoffice.sh

#!/bin/bash
python ./core/run.py collectstatic --no-input

files structure

total 56
drwxr-xr-x 9 root root 4096 Apr 11 12:53 .
drwxr-xr-x 3 root root 4096 Apr  8 11:57 ..
drwxr-xr-x 6 root root 4096 Apr 11 12:48 core
drwxr-xr-x  5 root root 4096 Apr 11 12:54 core/.
drwxr-xr-x  9 root root 4096 Apr 11 12:53 core/..
-rw-r--r--  1 root root  384 Apr 11 12:48 core/Dockerfile
-rw-r--r--  1 root root  654 Apr  8 11:28 core/run.py
-rw-r--r--  1 root root  270 Apr 11 12:40 core/run_backoffice.sh
-rw-r--r-- 1 root root 3099 Apr 11 12:53 docker-compose.yml
drwxr-xr-x 3 root root 4096 Apr  8 11:28 nginx

When I run collectstatic I get error

backoffice  | Traceback (most recent call last):
backoffice  |   File "/src/./core/run.py", line 22, in <module>
backoffice  |     main()
backoffice  |   File "/src/./core/run.py", line 18, in main
backoffice  |     execute_from_command_line(sys.argv)
backoffice  |   File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 446, in execute_from_command_line
backoffice  |     utility.execute()
backoffice  |   File "/usr/local/lib/python3.9/site-packages/django/core/management/__init__.py", line 440, in execute
backoffice  |     self.fetch_command(subcommand).run_from_argv(self.argv)
backoffice  |   File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 414, in run_from_argv
backoffice  |     self.execute(*args, **cmd_options)
backoffice  |   File "/usr/local/lib/python3.9/site-packages/django/core/management/base.py", line 460, in execute
backoffice  |     output = self.handle(*args, **options)
backoffice  |   File "/usr/local/lib/python3.9/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 209, in handle
backoffice  |     collected = self.collect()
backoffice  |   File "/usr/local/lib/python3.9/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 135, in collect
backoffice  |     handler(path, prefixed_path, storage)
backoffice  |   File "/usr/local/lib/python3.9/site-packages/django/contrib/staticfiles/management/commands/collectstatic.py", line 378, in copy_file
backoffice  |     self.storage.save(prefixed_path, source_file)
backoffice  |   File "/usr/local/lib/python3.9/site-packages/django/core/files/storage.py", line 57, in save
backoffice  |     name = self._save(name, content)
backoffice  |   File "/usr/local/lib/python3.9/site-packages/django/core/files/storage.py", line 296, in _save
backoffice  |     os.makedirs(directory, exist_ok=True)
backoffice  |   File "/usr/local/lib/python3.9/os.py", line 215, in makedirs
backoffice  |     makedirs(head, exist_ok=exist_ok)
backoffice  |   File "/usr/local/lib/python3.9/os.py", line 215, in makedirs
backoffice  |     makedirs(head, exist_ok=exist_ok)
backoffice  |   File "/usr/local/lib/python3.9/os.py", line 225, in makedirs
backoffice  |     mkdir(name, mode)
backoffice  | PermissionError: [Errno 13] Permission denied: '/src/core/static'


Solution 1:[1]

Create the src directory first RUN mkdir /src and try again

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Walucas