docker nginx将端口转发到容器错误

时间:2020-04-06 15:15:47

标签: docker nginx docker-compose

寻求有关配置Nginx的帮助,以将端口10000上的传入请求转发到容器中运行的应用程序。

我有一个包含3个容器的docker映像。第一个容器是Nginx服务器,第二个烧瓶应用程序,第三个是Dataiku DSS服务器。

flask应用程序可以正常工作,我可以通过端口443连接,但是当尝试连接到Dataiku DSS服务器时,我收到502错误“ Bad Request”。

我可以通过运行docker run 10000:10000 dataiku/dss来单独运行DSS Server容器,并且一切正常。我可以通过127.0.0.1:10000连接。在运行与项目完全独立的DSS服务器时,我还尝试了Nginx配置,但是仍然没有运气。

撰写文件如下:

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 conf:

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#reverse-proxy

另外,使用docker的原因是将要托管所有主机的计算机无法访问互联网,并且仅对我所在的网络可见。

任何帮助都会很棒,因为如果不进行此操作,我就会有些困难。

更新:

我想要实现的目标结果是使用户能够连接到任一应用程序。

例如:

www.example.com:5000 = app1
www.example.com:5001 = app2

如果上述操作不可行,我将如何实现类似的目标

www.example.com/app1 = app1
www.example.com/app2 = app2

1 个答案:

答案 0 :(得分:0)

您只需要在nginx中公开端口,因为您将其用作代理服务器。并且,在您的docker compose文件中,为nginx配置文件添加以下卷:

volumes:
    - ./nginx.conf:/etc/nginx/nginx.conf:ro