Docker,如何通过Django应用程序的端口公开套接字

我目前有supervisor服务我的Django应用程序,然后我的Docker文件中的端口8002 expose 。 这一切工作正常…

 [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文件中“EXPOSE”套接字。 这是我有多远:

新的主pipeconfiguration….

 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套接字。

如果你想在你的容器之外创build一个Unix域套接字,你将需要在容器中安装一个主机目录,然后把套接字放在那里。 例如,如果您要:

 docker run -v /srv/webapp:/var/run/webapp ... 

那么你的容器中的/var/run/webapp/gunicorn.sock就是你主机上的/srv/webapp/gunicorn.sock

当然,这里假设你有一些东西在你的主机上运行,​​或者在另一个也可以访问/srv/webapp容器中运行,它能够使用这个套接字并使用它来提供服务。