我正在使用docker-compose,现在有两个docker容器 - 一个是nginx webserver,而另一个是带有uwsgi和Flask的ubuntu。
据我所知,连接nginx和uWSGI的最佳方法是在它们之间共享一个* .sock文件并将请求传递到文件中(以及我在没有使用docker的旧项目中所做的事情)。
我想知道如何在dockers之间共享sock文件以启用它们之间的通信?
而且......我想知道两个容器的情况 - 一个用于nginx,另一个用于Flask框架和uWSGI - 是最佳实践,也是正确的。
由于
答案 0 :(得分:5)
您不需要与不同的docker容器共享sock文件。
简单的解决方案是在dockers之间共享套接字端口。
在uwsgi文件中需要添加socket=:3000
。
[uwsgi]
master=true
chdir=.
module=flaskapp
harakiri=60
callable=app
thunder-lock=true
socket=:3000
workers=12
threads=4
chmod-socket=666
vacuum=true
die-on-term=true
pidfile=uwsgi.pid
max-requests=5000
post-buffering=65536
post-buffering-bufsize=524288
定义nginx conf。 uwsgi_pass
部分flask:3000
表示(泊坞窗服务器名称):(泊坞窗暴露端口)。
server {
listen 80;
charset utf-8;
client_max_body_size 20M;
location / {
try_files $uri @slack;
}
location @slack {
include uwsgi_params;
uwsgi_pass flask:3000;
uwsgi_read_timeout 60s;
uwsgi_send_timeout 60s;
uwsgi_connect_timeout 60s;
}
}
在docker-compose文件中:
nginx:
container_name: nginx
build:
context: .
dockerfile: ./Dockerfile-Nginx
ports:
- "80:80"
depends_on:
- flask
flask:
tty: true
container_name: flask
build:
context: .
dockerfile: ./Dockerfile
expose:
- "3000"
command: uwsgi --ini ./uwsgi.ini
所以让docker为每个docker容器运行一个进程。