python - 如何使用 docker 容器运行服务器?
问题描述
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
码头工人文件
# 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/
码头工人-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
预期结果:在 web 浏览器中运行服务器,如在 chrome 中
实际结果 :
使用 docker-compose 时:提示中出现类似这样的错误:web_1 | python:无法打开文件'/code/manage.py':[Errno 2]没有这样的文件或目录
在 shell 上使用 'docker run -it $image_name sh' 和 'python manage.py runserver' 手动运行容器时:服务器正在运行,但未连接到 Web 浏览器。(不会出现在像chrome这样的浏览器中'
解决方案
你在很多方面都做过同样的事情。您已使用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
码头工人-compose.yml -:
# docker-compose.yml
version: '3.3'
services:
web:
build: .
command: python ./manage.py runserver 0.0.0.0:8000
ports:
- 8000:8000
推荐阅读
- python - 尝试从 Python 代码向 XSLT 文件传递参数时获取“xsltCompilePattern”
- python - Heroku Django 错误:SSL 证书已过期
- python - 如果单元格的长度在 python 中为 2,则在列中添加前导零
- firebase - 回收站视图不再加载
- java - 如何隐藏所有活动的导航栏?安卓工作室
- loops - 遍历ansible中的值
- html - 相对于把手中另一个数组的索引迭代一个数组
- python - pygame 函数似乎运行了两次
- javascript - 如何使用快速路由器设置速率限制
- php - Laravel 中间件使用碳