@
sss15 #9 展开讲一下:容器无网卡用 unix socket 通讯
举一个示例: 前置 nginx 接 python flask 的 web(GUNICORN),nginx 和 flask 都使用容器部署,flask 容器从绑定 tcp:5002 改成无网卡绑定/run/unix-socket/flask/flask.sock 。如果 flask 要访问 mysql 之类的,mysql 开启 unix socket 然后 volume 给 flask 容器即可。
flask 容器的 compose 文件原来配置是:
environment:
- GUNICORN_CMD_ARGS=-w 8 -b 0.0.0.0:5002 -k gevent
改成:
network_mode: none
environment:
- GUNICORN_CMD_ARGS=-w 8 -b unix:/run/unix-socket/flask/flask.sock -k gevent
volumes:
- /run/unix-socket/flask:/run/unix-socket/flask
nginx 容器的 compose 文件加入:
volumes:
- /run/unix-socket/flask:/run/unix-socket/flask
nginx 的网站配置从:
proxy_pass http://flaskcontainer1:5002/;
改成:
proxy_pass http://unix:/run/unix-socket/flask/flask.sock:/;
(语法:nginx 的 url 域名部分替换成 unix:/run/unix-socket/flask/flask.sock)
如果黑客入侵了 flask 容器,感知到的就是一个无网卡的黑洞洞的孤立世界。