python - Docker-compose/Nginx/Gunicorn - Nginx 不工作
问题描述
我对 Docker 相当陌生,我正在尝试将我的 Flask-App 容器化。应用程序 + gunicorn 的容器工作正常,我可以访问该站点。但是当我使用 docker-compose 包含一个 Nginx 容器时,我无法再连接到该站点。
我的文件:
Dockerfile(烧瓶):
FROM python:3.7-stretch
WORKDIR /app
ADD . /app
RUN pip install -r requirements.txt
EXPOSE 8080
CMD ["gunicorn", "-b", "127.0.0.1:8080", "app:app"]
Dockerfile (Nginx)
FROM nginx
RUN rm /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/conf.d/
nginx.conf
server {
listen 8080;
server_name localhost;
location / {
proxy_pass http://127.0.0.1:8080/;
}
location /static {
alias /var/www-data;
}
}
还有 docker-compose.yml
version: "3.7"
services:
flask:
build: ./flask
container_name: flask_cookbook
restart: always
environment:
- APP_NAME=Cookbook
expose:
- 8080
nginx:
build: ./nginx
container_name: nginx_cookbook
restart: always
ports:
- "80:8080"
当我使用 docker-compose up --build 运行容器时,一切似乎都运行良好:
Starting nginx_cookbook ... done
Starting flask_cookbook ... done
Attaching to nginx_cookbook, flask_cookbook
flask_cookbook | [2019-07-18 15:19:37 +0000] [1] [INFO] Starting gunicorn 19.9.0
flask_cookbook | [2019-07-18 15:19:37 +0000] [1] [INFO] Listening at: http://127.0.0.1:8080 (1)
flask_cookbook | [2019-07-18 15:19:37 +0000] [1] [INFO] Using worker: sync
flask_cookbook | [2019-07-18 15:19:37 +0000] [8] [INFO] Booting worker with pid: 8
但是当我去 127.0.0.1:8080 时,没有什么可以连接的。
我真的找不到错误,我可能在某个地方犯了...
附加信息:我使用的是 Windows 10
我的目录看起来像这样
Main Dir
├── docker-compose.yml
├── flask
│ ├── templates
│ ├── static
│ ├── app.py
│ ├── requirements.txt
│ └── Dockerfile
└── nginx
├── nginx.conf
└── Dockerfile
解决方案
感谢@ShawnC。,我解决了这个问题。引用他的话:
你有几个问题。A)您是代理将 nginx 传递到 localhost 上的同一端口,因为 nginx 正在侦听这将不起作用。您需要向烧瓶容器发出请求。
所以我将 nginx.conf 文件中的监听端口更改为 80(从 8080),并将 docker-compose.yml 的 nginx 部分中的端口更改为 80:80(从 80:8080)
B)从您的机器向 127.0.0.1:8080 发出请求将无法正常工作,因为没有 docker 容器正在侦听。您的配置说 nginx 应该使用端口 80,该端口将映射到容器中的 8080。所以你应该只向 127.0.0.1:80 发出请求
因此,我将 nginx.conf 中的代理通行证更改为 flask_cookbook:8080。所以容器名称,以及flask_app的暴露端口。这样,nginx 容器就可以向烧瓶容器发出请求。
我还必须将 flask-Dockerfile 中的 gunicorn 绑定更改为 0.0.0.0:8080,这样我就可以使用 Localhost/127.0.0.1 连接到 nginx 容器。
现在它可以工作了,我可以在 localhost:80 上连接到我的网站。
推荐阅读
- windows - 哪些文件需要与包含 CUDA Driver API 的应用程序一起分发?
- asp.net-core - 使用公共交通或 RabbitMQ 记录服务依赖项
- iiif - Omeka 上的通用查看器获取 TypeError:this._pubsub 未定义
- flutter - 需要在 Flutter 应用中实现 highchart 向下钻取
- javascript - 节点承诺属性
- string - 我想在 Bash 中从此字符串中提取日期并将其保存到变量中
- python - 如何将参数传递给 icon_create_function Python Folium?
- conditional-statements - 获取注册表项的值并继续执行 IF 语句
- reactjs - React-pdf 渲染影响整个 UI 线程
- python - 横向打印姓名两次