docker - docker nginx 将端口转发到容器错误
问题描述
寻找有关配置 Nginx 以将端口 10000 上的传入请求转发到容器中运行的应用程序的一些帮助。
我有一个包含 3 个容器的 docker 映像。第一个容器是 Nginx 服务器,第二个烧瓶应用程序和第三个是 Dataiku DSS 服务器。
烧瓶应用程序正常工作,我可以通过端口 443 进行连接,但是当尝试连接到 Dataiku DSS 服务器时,我收到 502 错误“错误请求”。
我可以通过运行自己运行 DSS Server 容器,docker run 10000:10000 dataiku/dss
并且一切都按预期工作。我可以通过 127.0.0.1:10000 连接。我还尝试了 Nginx 配置,同时运行完全独立于项目的 DSS 服务器,但仍然没有运气。
撰写文件如下所示:
version: "3.7"
services:
flask:
build: ./flask
container_name: flask
restart: always
image: trac
environment:
- APP_NAME=Trac
expose:
- 8080
depends_on:
- nginx
volumes:
- c:/trac_temp_files:/temp_files
dss:
build: ./dss
image: dss
container_name: dss
restart: always
expose:
- 10000
ports:
- "10000:10000"
depends_on:
- nginx
nginx:
build: ./nginx
image: nginx
container_name: nginx
restart: always
ports:
- "80:80"
- "443:443"
- "10000:10000"
nginx的配置:
server {
# Host/port on which to expose Data Science Studio to users
listen 10000 ssl;
ssl_certificate wildcard.crt;
ssl_certificate_key wildcard.key;
location / {
# Base url of the Data Science Studio installation
proxy_pass http://0.0.0.0:10000/;
proxy_redirect off;
# Allow long queries
proxy_read_timeout 3600;
proxy_send_timeout 600;
# Allow large uploads
client_max_body_size 0;
# Allow protocol upgrade to websocket
proxy_http_version 1.1;
proxy_set_header Host $http_host;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
server {
listen 80 default_server;
listen [::]:80 default_server;
listen 443 ssl http2 default_server;
ssl_certificate wildcard.crt;
ssl_certificate_key wildcard.key;
client_max_body_size 100M;
location / {
include uwsgi_params;
uwsgi_pass flask:8080;
}
}
我对 docker 很陌生,所以我想知道是否有一些我想念的东西。
我正在尝试遵循 Dataiku 关于通过 SSL 连接的建议,但我假设该指南并未假设您正在使用他们的 docker 映像https://doc.dataiku.com/dss/latest/installation/proxies.html #反向代理
此外,使用 docker 的原因是托管所有这些的机器没有互联网访问权限,并且仅对我所在的网络可见。
任何帮助都会很棒,因为没有这个工作我有点卡住了。
更新:
我想要实现的预期结果是用户能够连接到任一应用程序。
例如:
www.example.com:5000 = app1
www.example.com:5001 = app2
如果以上是不可能的,我将如何实现类似
www.example.com/app1 = app1
www.example.com/app2 = app2
解决方案
您只需要在 nginx 中公开端口,因为您将其用作代理服务器。此外,在您的 docker compose 文件中,为 nginx 配置文件添加如下卷:
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
推荐阅读
- java - 更新 Firebase 库后出现“找不到 com.google.android.gms.internal.zzbck 的类文件”错误
- python-3.x - 导入模块中的 Python 3.6 线程不会提高速度
- excel-formula - Excel 公式 - 扭曲数字的精确匹配
- jsonschema - 如何使用 JSONSchema 接受任何对象字符串值,而不管其键是什么?
- r - 在R中选择有时间的行
- javascript - 在nodejs中将服务器时间转换为任何给定的本地时间
- javascript - 异步请求后如何处理条件
- php - 检查来自 ajax 请求的响应
- javascript - 选中复选框后计算两个日期之间的天数
- c - 有没有办法知道为写入打开的文件描述符是否有人在读取端监听?