It implies that the docker.sock is used in read-only mode. In reality the :ro only works for files, but not for sockets.
The socket is like a http connection, dozzle sends GET requests to the socket to get results back from the daemon, so it is used two-ways, by no means it is read-only. The attack vector is that a potential hacker into the dozzle container could 1) read sensitive data like credentials in env and 2) use POST to do anything with containers (kill containers, run containers to extract data, run cryptominer, etc).
For real limited GET and no POST functionality, a docker-socket-proxy needs to be used. But be aware that with another component, you also increase your attack surface. Make sure to trust the supplier, code and build pipeline.
My recommendation is to simply remove the :ro from the doc as it has no effect. It implies security that does not exist.
The Github
README.md
shows this piece of code:It implies that the
docker.sock
is used in read-only mode. In reality the:ro
only works for files, but not for sockets.The socket is like a http connection,
dozzle
sends GET requests to the socket to get results back from the daemon, so it is used two-ways, by no means it is read-only. The attack vector is that a potential hacker into thedozzle
container could 1) read sensitive data like credentials in env and 2) use POST to do anything with containers (kill containers, run containers to extract data, run cryptominer, etc).For real limited GET and no POST functionality, a docker-socket-proxy needs to be used. But be aware that with another component, you also increase your attack surface. Make sure to trust the supplier, code and build pipeline.
My recommendation is to simply remove the
:ro
from the doc as it has no effect. It implies security that does not exist.