Docker容器中的Nginx会出现“连接重置”错误,但在没有容器

时间:2016-04-07 12:40:56

标签: django postgresql nginx docker

我已经将3个组件的简单设置包装到了docker容器中:

  • PostgreSQL数据库,名为workflows-db
  • 的容器 端口8000上的
  • Django + uWSGI Web服务器,名为workflows-django
  • 的容器
  • Nginx反向代理,名为workflows-nginx
  • 的容器

我正在运行Postgres和Django作为容器,它们工作正常。现在,我想添加Nginx。如果我只是在主机上本地安装Nginx(没有Docker)并运行它,我的设置工作正常。

但是如果我将完全相同的Nginx配置放入一个单独的docker容器中,它就无法100%响应https://个请求:

This site can’t be reached

The connection was reset.
ERR_CONNECTION_RESET

这是我的配置mysite.conf,放在/etc/nginx/sites-available/mysite.conf/etc/nginx/sites-enabled/mysite.conf中:

upstream django {
    server workflows-django:8000;
}

server {
    listen 80;
    server_name workflows.devbg.us;
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;

    server_name workflows.devbg.us;
    ssl_certificate /etc/ssl/private/bostongene.crt;
    ssl_certificate_key /etc/ssl/private/bostongene.key;
    charset utf-8;

    client_max_body_size 75M;

    location /media {
        alias /srv/workflows/media;
    }

    location /static {
        alias /srv/workflows/static;
    }

    location / {
        # We can talk to upstream django either via uwsgi or just http proxy

        # uwsgi:
        uwsgi_pass django;
        include /etc/nginx/uwsgi_params;


        # http proxy:
        #proxy_set_header Host $host;
        #proxy_pass http://django

    }
}

我使用以下参数在django和postgres容器之后运行nginx容器:

docker run --name workflows-nginx --volumes-from workflows-db --volumes-from workflows-django --link workflows-django:workflows-django -p 80:80 -p 443:443 -d workflows-nginx

我的主机上的文件/etc/hosts如下所示:

127.0.0.1   localhost
127.0.0.1   workflows-db
127.0.0.1   workflows-django
127.0.0.1   workflows-nginx
127.0.0.1   workflows.devbg.us

您对如何解决此问题有任何想法吗? Nginx error.log不包含这些错误。

1 个答案:

答案 0 :(得分:3)

docker hub的official docker image似乎被剥夺了nginx uwsgi适配器。

所以,我只是从debian手动创建了我自己的Nginx Dockerfile:jessie和瞧。似乎uwsgi适配器可以在nginx-commonnginx-full Debian软件包中的某个位置使用。

我的Dockerfile:

FROM debian:jessie

RUN apt-get update && apt-get install -y nginx \
                        ca-certificates \
                        gettext-base

COPY yoursite.conf /etc/nginx/sites-available/yoursite.conf
COPY yoursite.conf /etc/nginx/sites-enabled/yoursite.conf
COPY yoursite.crt /etc/ssl/private/
COPY yoursite.key /etc/ssl/private/

# forward request and error logs to docker log collector
RUN ln -sf /dev/stdout /var/log/nginx/access.log \
    && ln -sf /dev/stderr /var/log/nginx/error.log

EXPOSE 80 443

CMD ["/usr/sbin/nginx", "-g", "daemon off;"]