Estoy tratando de ejecutar el siguiente comando en docker-composer para iniciar el proyecto con django-admin :
docker-compose run app sh -c "django-admin startproject app ."Esto produce el error:
Traceback (most recent call last): File "/usr/local/bin/django-admin", line 10, in <module> sys.exit(execute_from_command_line()) File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line utility.execute() File "/usr/local/lib/python3.7/site-packages/django/core/management/__init__.py", line 375, in execute self.fetch_command(subcommand).run_from_argv(self.argv) File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 323, in run_from_argv self.execute(*args, **cmd_options) File "/usr/local/lib/python3.7/site-packages/django/core/management/base.py", line 364, in execute output = self.handle(*args, **options) File "/usr/local/lib/python3.7/site-packages/django/core/management/commands/startproject.py", line 20, in handle super().handle('project', project_name, target, **options) File "/usr/local/lib/python3.7/site-packages/django/core/management/templates.py", line 155, in handle with open(new_path, 'w', encoding='utf-8') as new_file: PermissionError: [Errno 13] Permission denied: '/manage.py'El Dockerfile es el siguiente:
FROM python:3.7-alpine MAINTAINER anubrij chandra ENV PYTHONUNBUFFERED 1 COPY ./requirements.txt /requirements.txt RUN pip install -r /requirements.txt RUN mkdir /app COPY ./app /app RUN adduser -D dockuser USER dockuser Mi docker-compose.yml :
version: "3" services: app: build: context: . ports: - "8000:8000" volumes: - ./app:/app command: > sh -c "python manage.py runserver 0.0.0.0:8000"Apliqué la solución sugerida en este hilo de Stack Overflow , pero no funcionó.
Estoy usando Ubuntu 18.04.
Llegué aquí buscando PermissionError: [Errno 13] Permission denied: así que dejaré esto aquí.
nota: la respuesta a continuación no funciona para sistemas multiusuario ... vea esta respuesta en su lugar para otra posible solución
Si desea configurarlo y olvidarlo para 1 usuario, su propio usuario... esto es lo que tengo en mi máquina de desarrollo.
No tenía el zócalo de Unix, así que lo escogí. (esto hizo que funcionara de inmediato)
sudo chown $(whoami):$(whoami) /var/run/docker.sockOtra solución más permanente para su entorno de desarrollo es modificar la propiedad del usuario de la creación del socket de Unix. Esto le dará a su usuario la propiedad, por lo que se mantendrá entre reinicios:
sudo nano /etc/systemd/system/sockets.target.wants/docker.socketdocker.socket:
[Unit] Description=Docker Socket for the API [Socket] ListenStream=/var/run/docker.sock SocketMode=0660 SocketUser=YOUR_USERNAME_HERE SocketGroup=docker [Install] WantedBy=sockets.targetDe nuevo, otra solución menos hacky: https://stackoverflow.com/a/70124863/2026508
En su dockerfile , está apuntando a un nuevo usuario dockuser .
RUN adduser -D dockuser USER dockuser Por lo tanto, su contenedor comenzará con el usuario dockuser que no parece tener los permisos adecuados para ejecutar /manage.py .
Tu también puedes
dockuser .O
dockuser usando los comandos chown y chmod en su dockerfile para el archivo /manage.py.He respondido una pregunta similar aquí .
Tuve el mismo problema y lo resolví agregando mi usuario al grupo docker :
$ sudo usermod -aG docker $(whoami)