当通过docker容器创建django项目时,它会显示sh:django-admin:not found



我在阿尔卑斯山的顶部创建了一个docker python图像问题是,当我想启动django应用程序时,它找不到django当我键入pip-list时,它是正确的bcz,它没有django和其他包。

ps:当创建图像时,它显示它正在收集django和其他包

这是requirements.txt文件

Django>=3.2.4,<3.3
djangorestframework>=3.12.4,<3.13

这是我的Dockerfile:

FROM python:3.9-alpine3.13
LABEL maintainer="siavash"
ENV PYTHONUNBUFFERED 1
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

ENV PATH = "/py/bin:$PATH"
USER django-user

这是docker-compose.yml


version: "3.9"
services:
app:
build:
context: .
args:
- DEV=true
ports:
- "8000:8000"
volumes:
- ./app:/app
command: >
sh -c "python manage.py runserver 0.0.0.0:8000"

这是我使用的命令:

docker-compose run --rm app sh -c "django-admin startproject app . "

BTW图像成功创建

所以我认为发生这种情况的原因是因为一个很难看到的非常简单的错误😭ENV PATH = "/py/bin:$PATH"应该是ENV PATH="/py/bin:$PATH"

您可能会遇到一些django用户问题USER django-user,所以你可以使用我粘贴的这个。

其他一切看起来都是正确的。

  1. 在正常情况下,您不应该在Docker Container中使用virtualenv。看见https://stackoverflow.com/a/48562835/19886776
  2. 在容器内部不需要创建额外的";django用户";用户,因为容器是一个孤立的环境

以下是通过Docker Container 创建新Django项目的代码

requirements.txt

Django>=3.2.4,<3.3

Dockerfile

FROM python:3.9-alpine3.13
ENV PYTHONUNBUFFERED 1
COPY ./requirements.txt /tmp/requirements.txt
RUN pip install -r /tmp/requirements.txt && 
rm /tmp/requirements.txt
WORKDIR /app

docker-compose.yml

version: "3.9"
services:
app:
build:
context: .
ports:
- "8000:8000"
volumes:
- ./app:/app
command: >
sh -c "python manage.py runserver 0.0.0.0:8000"

创建新项目的命令

docker-compose build
docker-compose run --rm app sh -c "django-admin startproject app ."
docker-compose up -d

要编辑由docker容器创建的文件,我们需要修复新文件的所有权。

sudo chown -R $USER:$USER app

尝试pip3 install而不是pip install

如果不起作用,请尝试在一个步骤中单独安装并检查。

相关内容