执行Docker-Compose命令遇PermissionError问题求助
解决Docker中Django startproject权限拒绝错误(PermissionError: [Errno 13])
问题根源
容器内的/app目录由root用户所有,而Dockerfile最后切换到了django-user执行命令,该用户没有/app目录的写入权限,导致django-admin startproject无法创建manage.py文件。
修复方案
方案1:修改Dockerfile(推荐)
在Dockerfile中添加命令,将/app目录的所有者改为django-user,同时修正环境变量的拼写错误:
FROM python:3.9-alpine3.13 LABEL maintainer="Kananappdeveloper" ENV PYTHONUNBUFFERED 1 # 修正原拼写错误:PYHTONUNBUFFERED → PYTHONUNBUFFERED COPY ./requirements.txt /tmp/requirements.txt COPY ./requirements.dev.txt /tmp/requirements.dev.txt COPY ./app /app WORKDIR /app EXPOSE 8000 ARG DEV=false RUN python -m venv /py && \ /py/bin/pip install --upgrade pip && \ /py/bin/pip install -r /tmp/requirements.txt && \ if [ $DEV = "true" ]; \ then /py/bin/pip install -r /tmp/requirements.dev.txt ; \ fi && \ rm -rf /tmp && \ adduser \ --disabled-password \ --no-create-home \ django-user && \ chown -R django-user:django-user /app # 添加此行,修改目录所有者 ENV PATH="/py/bin:$PATH" USER django-user
修改后重新构建镜像:
docker-compose build
再执行原命令即可正常创建项目。
方案2:临时以root用户执行命令
若不想重新构建镜像,可临时指定root用户运行命令:
docker-compose run --rm --user root app sh -c "django-admin startproject app ."
执行完成后,需修正本地生成文件的所有者,避免后续权限问题:
sudo chown -R $USER:$USER .
补充说明
之前能正常运行的原因可能包括:镜像构建时未切换到非root用户、当时/app目录权限配置不同,或是本地目录挂载权限发生了变化。
内容的提问来源于stack exchange,提问作者Kanan Samandarli
相关产品推荐
相关产品推荐

