【问题标题】:Docker, how to expose a socket over a port for a Django ApplicationDocker,如何通过 Django 应用程序的端口公开套接字
【发布时间】:2015-08-24 10:56:26
【问题描述】:

我目前有 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 文件中“公开”套接字。这是我已经走了多远:

新的主管配置....

backlog     = 2048
chdir       = "/var/projects/apps"
bind        = "unix:/var/run/webapp/gunicorn.sock"
pidfile     = "/var/run/webapp/gunicorn.pid"
daemon      = False
debug       = False

码头工人

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

如何暴露套接字?

【问题讨论】:

标签: python django docker


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2015-10-07
    • 2019-07-15
    • 2018-11-13
    • 1970-01-01
    • 2022-12-12
    • 2019-04-09
    相关资源
    最近更新 更多