我正在尝试在本地运行dockerized django网站。我在所有URL上都收到了 502错误网关,Nginx在连接到上游时记录了“(111:连接被拒绝)。
Nginx位于一个容器中,Gunicorn / Django位于另一个容器中:
app_en:
build:
context: ./
dockerfile: app.dockerfile
image: myproj:latest
depends_on:
- db_en
volumes:
- ./:/app
command: ["sh", "/app/conf/__build__/gunicorn/gunicorn_start_en.sh"]
working_dir: /app
networks:
main:
aliases:
- app_en
nginx:
image: nginx:latest
depends_on:
- app_en
volumes:
- ./:/app
- ./conf/__build__/nginx_vhost:/etc/nginx/sites-enabled
ports:
- "80:80"
networks:
main:
aliases:
- nginx
Gunicorn通过以下方式在其容器的TCP套接字上运行:
gunicorn project.settings.settings_en:application \
--name myproj_docker_en \
--timeout 120 \
--workers 2 \
--user=www-data \
--group=www-data \
--bind=0.0.0.0:8000 \
--log-level=debug
(端口8000通过gunicorn容器的Dockerfile公开)。
我可以通过其日志看到gunicorn成功启动:
Starting myproj_docker_en as 'root'
[INFO] Starting gunicorn 19.9.0
[INFO] Listening at: http://127.0.0.1:8000 (1)
[INFO] Using worker: sync
[INFO] Booting worker with pid: 12
[INFO] Booting worker with pid: 13
netstat -ltup
在gunicorn容器上显示了gunicorn / python正在监听8000:
tcp 0 0 localhost:8000 *:* LISTEN 1/python
但是nginx容器无法远程登录到它:
telnet app_en 8000
Trying 172.21.0.6...
telnet: Unable to connect to remote host: Connection refused
我可以docker inspect
放置gunicorn容器,看看它是正确的IP,并且打开了8000(但未映射到主机端口):
"Ports": {
"8000/tcp": null
}
...我有点茫然。显然,这很明显,我要踢自己,但是是什么阻止Nginx到达8000端口的Gunicorn容器呢?