我正在尝试在
docker-composer
中运行以下命令,以使用 django-admin
启动项目:
docker-compose run app sh -c "django-admin startproject app ."
这会产生错误:
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'
Dockerfile如下:
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
我的
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"
我应用了这个 Stack Overflow 线程中建议的解决方案,但它不起作用。
我使用的是 Ubuntu 18.04。
我来这里寻找
PermissionError: [Errno 13] Permission denied:
所以我就把它留在这里。
注意:以下答案不适用于多用户系统...请参阅此答案以获取另一种可能的解决方案
如果您想设置它并忘记 1 个用户(您自己的用户)...这是我的开发计算机上的内容。
我没有 unix 套接字,所以我把它搞砸了。 (这立刻就可以工作了)
sudo chown $(whoami):$(whoami) /var/run/docker.sock
针对您的开发环境的另一个更永久的解决方案是修改 unix 套接字创建的用户所有权。这将为您的用户提供所有权,因此它将在重新启动之间保持不变:
sudo nano /etc/systemd/system/sockets.target.wants/docker.socket
docker.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.target
又一个不那么麻烦的解决方案:https://stackoverflow.com/a/70124863/2026508
可能还想将目录/应用程序所有权更改为 docker
$ sudo chgrp -R docker /path/to/directory
并授予对 docker 的读写访问权限
$sudo chmod -R g+rw /path/to/directory
通过 WSL 在 Ubuntu 22.04 LTS 上为我工作
在您的
dockerfile
中,您指向一个新用户 dockuser
。
RUN adduser -D dockuser
USER dockuser
因此,您的容器将以用户
dockuser
启动,该用户似乎没有适当的权限来运行 /manage.py
。
你可以
dockuser
。或
dockuser
和 chown
命令为用户 chmod
提供适当的权限。我已经回答过类似的问题here。
我遇到了同样的问题,并通过将我的用户添加到
docker
组来解决它:
$ sudo usermod -aG docker $(whoami)
将此添加到您的
Dockerfile
之后 RUN adduser -D dockuser
:
RUN chown dockuser:dockuser -R /app/
如果您已经安装了这些文件,为什么还要
COPY
这些文件?
如果要保留挂载,需要在
rw
系统上而不是HOST
上的文件夹上添加
Container
权限
如果您使用的是 Mac,这可能适合您。
经过 4 天的时间排查此错误(以及其他奇怪的错误)后,我发现我需要修复文件系统中的 docker 权限。要执行此操作,请访问:
系统偏好设置 -> 安全和隐私 -> 隐私选项卡 -> 完整磁盘访问(左侧,列表中的某处) -> 单击 + -> Docker 应用程序
调试非常令人沮丧的问题,希望有帮助。
我使用的 Dockerfile 位于我的虚拟机 (VirtualBox) 的共享目录中。因此,我的问题与该目录的默认权限(UID=root,GID=vboxdf)有关。我必须将其更改为当前用户才能正确运行我的容器。
有关如何更改所有者的说明,请参阅 https://superuser.com/a/640028/1655184。
对我来说,这是 Windows 上的 WSL2 / Docker-Desktop 设置问题。
缺少的是显式启用 WSL 发行版:Docker Desktp 设置 > 资源 > WSL 集成 > 启用您的发行版
然后重新打开 WSL shell。
之前我什至无法做到
docker run hello-world
,但在运行 docker-compose 时也有与 OP 非常相似的错误消息。
在 docker-compose 中添加应用程序的路径,例如“/home/user/app:/app”,而不仅仅是“.:/app”,解决了我的问题
对于 ubuntu,只需在命令中添加 sudo 并以 root 身份运行即可获取权限。
sudo docker-compose run app sh -c "django-admin startproject app ."
我遇到了类似的问题,问题是我运行 docker-desktop。解决方案是退出 docker-desktop。 操作系统:Ubuntu 20.04LTS
退出后重新构建并重新运行命令。
对我来说 Docker Desktop 有效的解决方案是将相关项目目录添加到“虚拟文件共享”中,方法如下:
Docker Desktop
-> Settings
(齿轮图标)-> Resources
-> File sharing
(子菜单)-> 将 <path>/<to>/<project-directory>
添加到列表 virtual file shares
。
希望有帮助!