502 Docker Flask应用程序的带有Nginx反向代理的坏网关

502 Docker Flask应用程序的带有Nginx反向代理的坏网关,nginx,docker-compose,nginx-reverse-proxy,Nginx,Docker Compose,Nginx Reverse Proxy,我在为docker应用程序创建反向代理时遇到问题,该应用程序公开了端口5000。理想情况下,我希望能够使用子域 这是我的docker-compose.yaml文件 version: "2" services: nginx: image: nginx:1.15-alpine ports: - "80:80" - "443:443" volumes: - ./data/nginx:/etc/nginx/conf.d - ./

我在为docker应用程序创建反向代理时遇到问题,该应用程序公开了端口5000。理想情况下,我希望能够使用子域

这是我的docker-compose.yaml文件

version: "2"
services:
  nginx:
    image: nginx:1.15-alpine
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - ./data/nginx:/etc/nginx/conf.d
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    command: "/bin/sh -c 'while :; do sleep 6h & wait $${!}; nginx -s reload; done & nginx -g \"daemon off;\"'"
    restart: always
  certbot:
    image: certbot/certbot
    volumes:
      - ./data/certbot/conf:/etc/letsencrypt
      - ./data/certbot/www:/var/www/certbot
    entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
    restart: always
  db:
    image: mysql:5.7
    ports:
      - "32000:3306"
    environment:
      MYSQL_DATABASE: drinks
      MYSQL_RANDOM_ROOT_PASSWORD: "yes"
      MYSQL_USER: my_user
      MYSQL_PASSWORD: password_here
    volumes:
      - my-datavolume:/var/www/mysql
  app:
    restart: always
    build: ./
    links:
      - db
    ports:
      - "5000:5000"
volumes:
  my-datavolume:
这是我的文件

FROM python:3.6-alpine

# create a new user named marty
RUN adduser -D marty

# current directory where the app will be installed
WORKDIR /home/marty

# copy file from the machine to the container file system
COPY app app
COPY requirements.txt requirements.txt

# run a virtual env and install requirements
RUN python3 -m venv venv
CMD source ./venv/bin/activate
RUN apk add --no-cache --virtual .pynacl_deps build-base python3-dev libffi-dev openssl-dev
RUN pip install -r requirements.txt


# The EXPOSE instruction indicates the ports on which a container # # will listen for connections
# Since Flask apps listen to port 5000  by default, we expose it
EXPOSE 5000

# Run app.py when the container launches
CMD python app/app.py
最后,这里是我的nginx配置

server {
    listen 80;
    server_name api.example.com;
    location / {
        return 301 https://$host$request_uri;
    }
    location /.well-known/acme-challenge/ {
        root /var/www/certbot;
    }
}
server {
    listen 443 ssl;
    server_name api.example.com;

    location / {
        proxy_pass http://0.0.0.0:5000;
    }

    ssl_certificate /etc/letsencrypt/live/api.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/api.example.com/privkey.pem;

    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
由于某种原因,当导航到api.example.com时,我总是得到一个
502坏网关

我还为api创建了一个记录。及www.api


问题在于Centos 7和Selinux。我通过切换到Debian并发誓永远退出Centos解决了这个问题。

也有同样的问题,并且
setEnforce0
启用了请求。我不会在这里责备任何人,当然也不会责备CentOS;这正是使用selinux设置nginx的方式(不允许轻松打开443和80以外的端口)。谢谢你的建议!我的配置与Debian完全相同,但在Debian上运行,但仍然存在以下错误:/