简体   繁体   中英

Docker, how to expose a socket over a port for a Django Application

I currently have supervisor serving my Django Application which I then expose on port 8002 in my Docker file. This all works ok...

[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

In Docker

# Expose listen ports
EXPOSE 8002

However, I have been told it is better to use a socket over a port but, I'm unsure how to "EXPOSE" a socket in my Docker file. This is how far I have got:

New supervisor config....

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;???)

How do I expose the socket?

EXPOSE only works with UDP and TCP sockets.

If you want to make a Unix domain socket available outside of your container, you will need to mount a host directory inside the container and then place the socket there. For example, if you were to:

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

Then /var/run/webapp/gunicorn.sock in your container would be /srv/webapp/gunicorn.sock on your host.

Of course, this assumes that you have something running on your host, or in another container that also has access to /srv/webapp , that is able to consume that socket and use it to provide a service.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM