nginx 无法使用 docker-compose 连接到其他容器中的 uwsgi

时间:2021-02-05 09:50:31

标签: docker nginx docker-compose uwsgi

我使用 docker-compose 并且有两个容器,一个用于 uwsgi,一个用于 nginx。但是好像nginx连接uwsgi失败了。

这里是环境。

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.1 LTS
Release:        20.04
Codename:       focal
$ docker --version
Docker version 20.10.3, build 48d30b5
$ docker-compose --version
docker-compose version 1.24.0, build 0aa59064

奇怪的是,如果我登录nginx容器并尝试手动连接到uwsgi,则成功如下。

$ docker-compose ps --service
python
nginx
$ docker-compose exec nginx /bin/bash
# curl python:8001
success!

但是,当我尝试通过 nginx 访问 uwsgi 时,它失败了。

# curl localhost:8000/s
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.15.3</center>
</body>
</html>

这是我的配置。这些有什么问题?我该如何解决这个问题?

docker-compose.yml

version: '3'
services:
  nginx:
      image: nginx:1.15.3
      ports:
        - "80:8000"
      volumes:
        - ./nginx/nginx.conf:/etc/nginx/nginx.conf
        - ./python/uwsgi_params:/etc/nginx/uwsgi_params
        - .:/code
      depends_on:
        - python
  python:
      build: ./python
      ports:
        - "8001:8001"
      volumes:
        - ./proj:/code/proj
      command: bash -c "ls -l && cd proj && pwd && uwsgi --http :8001 --module fargate.wsgi --logto uwsgilog.txt"

nginx/nginx.conf

events {
        worker_connections 768;
}

http {
        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        include /etc/nginx/mime.types;
        default_type application/octet-stream;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;
        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;
        gzip on;
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;

    upstream django {
        server python:8001;
    }
    server {
        listen       8000; 
        server_name  localhost;
        root         /code/nginx/html;
        charset      utf-8;
        include /etc/nginx/default.d/*.conf;
        client_max_body_size 100M;

        location /static {
            alias /code/proj/static;
        }
        location ~ ^/s/(.*)$ {
        uwsgi_pass django;
        include /code/python/uwsgi_params;
        uwsgi_param SCRIPT_NAME /s;
        uwsgi_param PATH_INFO /$1;
        }
    }
}

python/Dockerfile

FROM python:3.6
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
RUN mkdir /code/python
WORKDIR /code
ADD . /code/python/
RUN pip install -r python/requirements.txt

0 个答案:

没有答案