blz*_*blz 0 django nginx uwsgi docker docker-compose
我正在使用Docker Compose来编排由Django webapp和nginx反向代理组成的多容器应用程序。
我盯着一个简单的测试用例,但是我已经遇到了障碍。该应用程序应通过网络套接字()将所有请求传递/给Django应用程序。uwsgi_passfrontend:8000
但是,在启动应用程序后docker-compose up没有看到错误消息之后,任何/在控制台中产生以下错误消息的请求: gateway_1 | 2016/01/11 15:45:12 [error] 8#0: *1 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.99.1, server: localhost, request: "GET / HTTP/1.1", upstream: "uwsgi://172.17.0.2:8000", host: "192.168.99.100:8000"
我的问题如下: 可能是什么问题?用替换uwsgi_pass frontend;该location块的content_by_lua_file path/to/file.lua;行为符合预期,因此我怀疑容器链接上的uWSGI有问题,但是我对接下来的查找感到迷惑。
以下是相关文件:
该docker-compose.yml文件如下:
postgres:
image: mystuff/app.testdb:latest
expose:
- "5432"
frontend:
image: mystuff/app.frontend:latest
expose:
- "8000"
environment:
APP_DBCONN: "user=xxx dbname=xxx port=5432 host=postgres sslmode=require password=xxx"
APP_ENV: "test"
gateway:
image: mystuff/app.gateway:latest
links:
- frontend
expose:
- "8000"
ports:
- "8000:8000"
Run Code Online (Sandbox Code Playgroud)
以下是我的nginx.conf文件:
worker_processes 1;
user me;
events {
use epoll;
worker_connections 1024;
}
http {
access_log /dev/stdout;
upstream frontend {
server frontend:8000; # assumption: `frontend` is a known hostname thanks to docker-compose
}
server {
listen 8000;
server_name localhost;
location / {
uwsgi_pass frontend;
include uwsgi_params;
}
}
}
Run Code Online (Sandbox Code Playgroud)
最后,这是我的uwsgi_params文件:
uwsgi_param QUERY_STRING $query_string;
uwsgi_param REQUEST_METHOD $request_method;
uwsgi_param CONTENT_TYPE $content_type;
uwsgi_param CONTENT_LENGTH $content_length;
uwsgi_param REQUEST_URI $request_uri;
uwsgi_param PATH_INFO $document_uri;
uwsgi_param DOCUMENT_ROOT $document_root;
uwsgi_param SERVER_PROTOCOL $server_protocol;
uwsgi_param REQUEST_SCHEME $scheme;
uwsgi_param HTTPS $https if_not_empty;
uwsgi_param REMOTE_ADDR $remote_addr;
uwsgi_param REMOTE_PORT $remote_port;
uwsgi_param SERVER_PORT $server_port;
uwsgi_param SERVER_NAME $server_name;
Run Code Online (Sandbox Code Playgroud)
uwsgi.ini:
[uwsgi]
chdir = /home/app
wsgi-file = ./NFC/wsgi.py
socket = 127.0.0.1:8000
master = true
processes = 1
threads = 2
uid = me
Run Code Online (Sandbox Code Playgroud)
http = 127.0.0.1:8000在uwsgi.ini$ cat /tmp/uwsgi.log
*** Starting uWSGI 2.0.12 (64bit) on [Wed Jan 13 12:09:44 2016] ***
compiled with version: 4.9.2 on 03 January 2016 21:09:04
os: Linux-4.1.13-boot2docker #1 SMP Fri Nov 20 19:05:50 UTC 2015
nodename: default
machine: x86_64
clock source: unix
pcre jit disabled
detected number of CPU cores: 1
current working directory: /home/srg
detected binary path: /home/srg/.pyenv/versions/2.7.11/bin/uwsgi
chdir() to /home/srg
your processes number limit is 1048576
your memory page size is 4096 bytes
detected max file descriptor number: 1048576
lock engine: pthread robust mutexes
thunder lock: disabled (you can enable it with --thunder-lock)
uWSGI http bound on 127.0.0.1:8000 fd 7
uwsgi socket 0 bound to TCP address 127.0.0.1:38922 (port auto-assigned) fd 6
Python version: 2.7.11 (default, Jan 3 2016, 21:07:12) [GCC 4.9.2]
Python main interpreter initialized at 0x1d37300
python threads support enabled
your server socket listen backlog is limited to 100 connections
your mercy for graceful operations on workers is 60 seconds
mapped 166144 bytes (162 KB) for 2 cores
*** Operational MODE: threaded ***
WSGI app 0 (mountpoint='') ready in 0 seconds on interpreter 0x1d37300 pid: 173 (default app)
*** uWSGI is running in multiple interpreter mode ***
spawned uWSGI master process (pid: 173)
spawned uWSGI worker 1 (pid: 210, cores: 2)
spawned uWSGI http 1 (pid: 211)
SIGINT/SIGQUIT received...killing workers...
gateway "uWSGI http 1" has been buried (pid: 211)
worker 1 buried after 1 seconds
goodbye to uWSGI.
Run Code Online (Sandbox Code Playgroud)
使用该uWSGI配置,尤其是:
socket = 127.0.0.1:8000
Run Code Online (Sandbox Code Playgroud)
uWSGI将仅允许本地连接(这意味着来自同一docker,而不是来自主机或其他docker)。要允许来自docker外部的连接,必须将其更改为:
socket = :8000
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1054 次 |
| 最近记录: |