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

标签 python django docker

我目前有 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/

相关文章:

python - Windows 10 Bash 中的 py-opencv 导入错误

python - 如何覆盖 Django 管理列表中的查询集 count() 方法

Docker -it 命令与 Docker 镜像或 Docker 容器相关

javascript - 为什么 JS 中的简单阶乘算法比 Python 或 R 中的快得多?

python - 试图在 Python 中找到断开连接的图

python - 构造一个KMP算法要回溯多次的例子

python - Django的filesizeformat的使用方法

python - 如何直接查询Django为ManyToMany关系创建的表?

java - Azure 构建管道,docker compose - 设置环境变量

docker - 在dockerfile和docker-compose文件中使用 “expose”的区别?