Django服务器在localhost中运行良好。但是,当我尝试在docker容器上运行服务器时,使用docker-compose文件时找不到manage.py文件,即使我手动运行容器并运行服务器,它也不会出现在浏览器中。我怎么解决这个问题?
因此,我在本地服务器上编写了所有代码测试,并使用dockerfile构建了项目的映像。
,我试图在docker容器上运行服务器,突然这没有运行。 更糟糕的是,如果我使用docker-compose来运行服务器,尽管我已经使用'docker run -it $ image_name sh'进行了检查,但它找不到manage.py文件
这是我的项目的代码
我是docker的新手,也是编程的新手。 希望你能给我帮助。谢谢!
文件结构
current directory
└─example
└─db.sqlite3
└─docker-compose.yml
└─Dockerfile
└─manage.py
└─Pipfile
└─Pipfile.lock
Docker文件
# Base image - Python version
FROM python:3.6-alpine
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Set work directory
WORKDIR /code
# Copy Pipfile
COPY Pipfile /code
COPY Pipfile.lock /code
# Install dependencies
RUN pip install pipenv
RUN pipenv install --system
# Copy files
COPY . /code/
docker-compose.yml
# docker-compose.yml
version: '3.3'
services:
web:
build: .
command: python /code/manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- 8000:8000
预期结果:在网络浏览器中运行服务器,例如chrome
实际结果:
使用docker-compose时: 在提示中出现如下错误:web_1 | python:无法打开文件'/code/manage.py':[Errno 2]没有这样的文件或目录
当在外壳上使用'docker run -it $ image_name sh'和'python manage.py runserver'手动运行容器时: 服务器正在运行,但未连接到Web浏览器。 (不会在浏览器中显示为chrome'
答案 0 :(得分:1)
您在很多方面都做过同样的事情。您已经使用COPY
命令复制了源文件,然后在docker-compose.yml文件中安装了主机卷。首先,您不需要卷,因为卷挂载用于持久存储Docker容器生成和使用的数据。
遵循简化的Dockerfile和docker-compose文件将解决此问题。
# Base image - Python version
FROM python:3.6-alpine
# Set environment variables
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
# Copy files
COPY . /code/
# Set work directory
WORKDIR /code
# Install dependencies
RUN pip install pipenv
RUN pipenv install --system
docker-compose.yml-:
# docker-compose.yml
version: '3.3'
services:
web:
build: .
command: python ./manage.py runserver 0.0.0.0:8000
ports:
- 8000:8000