Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 439
MarkK Avatar asked Dec 20 '25 18:12

MarkK


1 Answers

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.

like image 120
larsks Avatar answered Dec 23 '25 08:12

larsks