我目前有 supervisor
服务我的 Django 应用程序,然后我在我的 Docker 文件中的端口 8002
上公开
。这一切正常...
[program:app]
command=gunicorn app.core.wsgi:application -c /var/projects/app/server/gunicorn.conf
user=webapp
backlog = 2048
chdir = "/var/projects/apps"
bind = "0.0.0.0:8002"
pidfile = "/var/run/webapp/gunicorn.pid"
daemon = False
debug = False
在 Docker 中
# Expose listen ports
EXPOSE 8002
但是,有人告诉我最好在端口上使用 socket
,但我不确定如何在我的 Docker 文件中“公开”一个套接字。这是我得到的结果:
新主管配置....
backlog = 2048
chdir = "/var/projects/apps"
bind = "unix:/var/run/webapp/gunicorn.sock"
pidfile = "/var/run/webapp/gunicorn.pid"
daemon = False
debug = False
docker
# Expose listen ports
EXPOSE ???? (may be unix:/var/run/webapp/gunicorn.sock fail_timeout=0;???)
如何暴露套接字?
最佳答案
EXPOSE
仅适用于 UDP 和 TCP 套接字。
如果你想让一个 Unix 域套接字在你的容器之外可用,你需要在容器内挂载一个主机目录,然后将套接字放在那里。例如,如果您要:
docker run -v /srv/webapp:/var/run/webapp ...
那么容器中的 /var/run/webapp/gunicorn.sock
将是主机上的 /srv/webapp/gunicorn.sock
。
当然,这假设您有一些东西在您的主机上运行,或者在另一个也可以访问 /srv/webapp
的容器中运行,它能够使用该套接字并使用它来提供一项服务。
关于python - Docker,如何通过 Django 应用程序的端口公开套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32180589/