Docker Tip #55: Creating Read Only Containers
You may want to enable read-only on your containers to enhance its security, or perhaps you have other app specific needs.
Personally I’ve never had a reason to use read-only containers but someone from my Dive Into Docker course recently asked how to do it, so here we are.
Lucky for us, it’s really easy!
Testing out a read-only container:
docker container run --rm --read-only alpine:3.7 touch hello.txt
> touch: hello.txt: Read-only file system
You’ll notice that the file won’t be created. If you removed the
--read-only flag then you’ll be able to write the file.
One thing to note is, not all images fully support this by default. Certain images will expect to be able to write to specific areas of the file system, such as to
This will really come down to the image. For example Redis works fine with
--read-only all by itself but Postgres does not.
Dealing with situational writes in a read-only container:
If you come across an image that doesn’t work with
--read-only automatically you may need to use the
--tmpfs flag too.
This will allow you to create writeable directories for whatever you need.
For example if you wanted to make
/run writeable you could do
--tmpfs /run. You can also use
--tmpfs multiple times in the same
docker run command if you need more than 1 writeable directory.
--tmpfs is nice because it doesn’t write a volume back to your Docker host.