Docker 运行没有问题,但我无法从给定的 url 访问该站点
Docker runs without a problem but i cant reach the site from the given url
[2021-02-22 11:24:59 +0000] [1] [INFO] Starting gunicorn 20.0.4
[2021-02-22 11:24:59 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
[2021-02-22 11:24:59 +0000] [1] [INFO] Using worker: sync
[2021-02-22 11:24:59 +0000] [7] [INFO] Booting worker with pid: 7
当我打开 url 时,服务器似乎无法正常工作。我将 Django 用于网络应用程序。当我构建 docker 或使用
启动应用程序时它工作正常
python manage.py runserver
但是当我这样做的时候
docker run app
它不起作用。
Output
DOCKER 文件:
FROM python:3.8-slim-buster
EXPOSE 8000
ENV VAR1=10
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
COPY requirements.txt .
RUN python -m pip install -r requirements.txt
WORKDIR /app
COPY . /app
RUN useradd appuser && chown -R appuser /app
USER appuser
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app.wsgi"]
有效答案:
=> docker 运行 -p 8000:8000 app 然后从浏览器连接到 http://localhost:8000。
来自 Zeitounator。
我建议您为 运行 使用 docker-compose 并使用您的图像并设置您想要的任何环境变量。
docker-compose 文件的示例可能是这样的:
version: "3.8"
services:
my_simple_site:
image: my_simple_site:0.0.0
container_name: my_simple_site
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
environment:
- GUNICORN_WORKER_NUM=1
您可以看到您可以传递环境变量的工人数 (GUNICORN_WORKER_NUM
)。
之后 运行 你的应用程序在 Gunicorn 上使用配置文件。配置文件可能如下 python 所示。例如,我在名为 gunicorn.conf.py
的文件中创建了这个供以后使用:
import os
bind = "0.0.0.0:8000"
workers = os.getenv('GUNICORN_WORKER_NUM', 1)
timeout = 200
user = 'root'
directory = '/address/to/your/app'
之后,您可以像这样在 DockerFile 中使用它:
CMD ["gunicorn", "--config", "/address/to/cofingfile/gunicorn.conf.py",
"app.wsgi"]
为了进一步改进,最好在您的项目中使用 supervisor 和 Nginx。
[2021-02-22 11:24:59 +0000] [1] [INFO] Starting gunicorn 20.0.4
[2021-02-22 11:24:59 +0000] [1] [INFO] Listening at: http://0.0.0.0:8000 (1)
[2021-02-22 11:24:59 +0000] [1] [INFO] Using worker: sync
[2021-02-22 11:24:59 +0000] [7] [INFO] Booting worker with pid: 7
当我打开 url 时,服务器似乎无法正常工作。我将 Django 用于网络应用程序。当我构建 docker 或使用
启动应用程序时它工作正常python manage.py runserver
但是当我这样做的时候
docker run app
它不起作用。
Output
DOCKER 文件:
FROM python:3.8-slim-buster
EXPOSE 8000
ENV VAR1=10
ENV PYTHONDONTWRITEBYTECODE=1
ENV PYTHONUNBUFFERED=1
COPY requirements.txt .
RUN python -m pip install -r requirements.txt
WORKDIR /app
COPY . /app
RUN useradd appuser && chown -R appuser /app
USER appuser
CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app.wsgi"]
有效答案:
=> docker 运行 -p 8000:8000 app 然后从浏览器连接到 http://localhost:8000。
来自 Zeitounator。
我建议您为 运行 使用 docker-compose 并使用您的图像并设置您想要的任何环境变量。 docker-compose 文件的示例可能是这样的:
version: "3.8"
services:
my_simple_site:
image: my_simple_site:0.0.0
container_name: my_simple_site
build:
context: .
dockerfile: Dockerfile
ports:
- "8000:8000"
environment:
- GUNICORN_WORKER_NUM=1
您可以看到您可以传递环境变量的工人数 (GUNICORN_WORKER_NUM
)。
之后 运行 你的应用程序在 Gunicorn 上使用配置文件。配置文件可能如下 python 所示。例如,我在名为 gunicorn.conf.py
的文件中创建了这个供以后使用:
import os
bind = "0.0.0.0:8000"
workers = os.getenv('GUNICORN_WORKER_NUM', 1)
timeout = 200
user = 'root'
directory = '/address/to/your/app'
之后,您可以像这样在 DockerFile 中使用它:
CMD ["gunicorn", "--config", "/address/to/cofingfile/gunicorn.conf.py",
"app.wsgi"]
为了进一步改进,最好在您的项目中使用 supervisor 和 Nginx。