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

MrK*_*tts 3 python django docker

我目前正在supervisor为我的 Django 应用程序提供服务,然后我将其expose移植8002到我的 Docker 文件中。这一切正常...

[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
Run Code Online (Sandbox Code Playgroud)

在 Docker 中

# Expose listen ports
EXPOSE 8002
Run Code Online (Sandbox Code Playgroud)

但是,有人告诉我最好使用 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
Run Code Online (Sandbox Code Playgroud)

码头工人

# Expose listen ports
EXPOSE ???? (may be unix:/var/run/webapp/gunicorn.sock fail_timeout=0;???)
Run Code Online (Sandbox Code Playgroud)

我如何暴露套接字?

lar*_*sks 5

EXPOSE 仅适用于 UDP 和 TCP 套接字。

如果您想让 Unix 域套接字在容器外可用,则需要在容器内挂载一个主机目录,然后将套接字放置在那里。例如,如果您要:

docker run -v /srv/webapp:/var/run/webapp ...
Run Code Online (Sandbox Code Playgroud)

然后/var/run/webapp/gunicorn.sock在您的容器中将/srv/webapp/gunicorn.sock位于您的主机上。

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