📖 Scenario: You are working on a Docker container that needs to access some files from your host machine. To keep the container safe and prevent accidental changes, you want to mount the files as read-only.
🎯 Goal: Learn how to mount a host directory into a Docker container as a read-only volume.
📋 What You'll Learn
Create a Docker volume mount command with a host directory
Add a read-only flag to the volume mount
Run a container that uses the read-only volume
Verify the volume is mounted as read-only inside the container
💡 Why This Matters
🌍 Real World
Mounting read-only volumes is useful when you want to share configuration files or data with containers without risking accidental changes.
💼 Career
Understanding volume mounts and permissions is essential for container management and deployment in DevOps roles.
Progress0 / 4 steps
1
Create a host directory with a file
Create a directory called mydata in your current folder and inside it create a file named info.txt with the text Hello Docker.
Docker
Hint
Use mkdir -p mydata to create the directory and echo to write text to the file.
2
Write the Docker run command with volume mount
Write a docker run command that starts an alpine container and mounts the host directory mydata to /data inside the container.
Docker
Hint
Use -v $(pwd)/mydata:/data to mount the directory.
3
Add the read-only flag to the volume mount
Modify the docker run command to mount the volume as read-only by adding :ro at the end of the volume mount.
Docker
Hint
Add :ro after the container path in the volume mount to make it read-only.
4
Verify the volume is read-only inside the container
Inside the running container, try to create a new file /data/newfile.txt. Use the command touch /data/newfile.txt and observe the output. Then print the contents of /data/info.txt using cat /data/info.txt.
Docker
Hint
The touch command should fail because the volume is read-only. The cat command should display Hello Docker.
Practice
(1/5)
1. What does adding :ro at the end of a Docker volume mount do?
easy
A. Mounts the volume with root user permissions
B. Mounts the volume as read-write, allowing container writes
C. Removes the volume after container stops
D. Mounts the volume as read-only, preventing container writes
Solution
Step 1: Understand Docker volume mount options
Docker allows mounting volumes with options like :ro or :rw to control access.
Step 2: Identify the effect of :ro
The :ro option makes the mounted volume read-only inside the container, so the container cannot modify the data.
Final Answer:
Mounts the volume as read-only, preventing container writes -> Option D
Quick Check:
:ro means read-only mount [OK]
Hint: Remember 'ro' means read-only, no writes allowed [OK]
Common Mistakes:
Confusing :ro with :rw
Thinking :ro deletes volume after use
Assuming :ro changes user permissions
2. Which of the following is the correct syntax to mount a host directory /data as a read-only volume inside a container at /app/data?
easy
A. docker run -v /data:/app/data:rw myimage
B. docker run -v /data:/app/data:read-only myimage
C. docker run -v /data:/app/data:ro myimage
D. docker run -v /data:/app/data:readonly myimage
Solution
Step 1: Recall Docker volume mount syntax
The syntax is -v host_path:container_path:options, where options can be ro or rw.
Step 2: Identify correct read-only option
The correct option for read-only is ro. Options like read-only or readonly are invalid.
Final Answer:
docker run -v /data:/app/data:ro myimage -> Option C
Quick Check:
Use :ro for read-only mount [OK]
Hint: Use ':ro' exactly for read-only volume mounts [OK]
Common Mistakes:
Using ':rw' instead of ':ro' for read-only
Writing 'readonly' or 'read-only' instead of 'ro'
Omitting the option entirely
3. Given the command:
docker run -v /host/config:/app/config:ro myapp
What will happen if the container tries to write a file inside /app/config?
medium
A. The write will fail with a permission error
B. The container will crash immediately
C. The write will succeed and file will be saved
D. Docker will remount the volume as read-write automatically
Solution
Step 1: Understand the effect of :ro mount
The volume is mounted read-only, so the container cannot modify files in /app/config.
Step 2: Predict container behavior on write attempt
When the container tries to write, the OS denies permission, causing a write failure with an error.
Final Answer:
The write will fail with a permission error -> Option A
Quick Check:
Read-only mount blocks writes with permission error [OK]
You want to make the volume read-only but accidentally write :ro as :or. What will happen?
medium
A. Docker will mount the volume as read-only anyway
B. Docker will throw an error and refuse to start the container
C. The volume will be mounted as read-write
D. The container will start but fail when writing to the volume
Solution
Step 1: Check the mount option syntax
The option :ro is valid for read-only. :or is invalid and not recognized by Docker.
Step 2: Understand Docker's response to invalid options
Docker will detect the invalid option and refuse to start the container, showing an error.
Final Answer:
Docker will throw an error and refuse to start the container -> Option B
Quick Check:
Invalid mount options cause Docker errors [OK]
Hint: Check option spelling carefully; invalid options cause errors [OK]
Common Mistakes:
Assuming Docker ignores invalid mount options
Thinking volume mounts as read-only despite typo
Believing container starts but fails later
5. You want to share a configuration directory /etc/config with multiple containers but prevent them from modifying it. Which command correctly mounts it read-only and ensures the container user cannot override this?
hard
A. docker run -v /etc/config:/config:ro myapp
B. docker run --read-only -v /etc/config:/config myapp
C. docker run -v /etc/config:/config:rw --user 1000 myapp
D. docker run -v /etc/config:/config:rw myapp
Solution
Step 1: Understand read-only volume mount
Mounting with :ro makes the volume read-only inside the container, preventing writes regardless of user.
Step 2: Evaluate other options
docker run --read-only -v /etc/config:/config myapp makes the entire container filesystem read-only, which is overly restrictive. docker run -v /etc/config:/config:rw --user 1000 myapp adds user but does not prevent writes since volume is read-write. docker run -v /etc/config:/config:rw myapp mounts read-write, allowing changes.
Final Answer:
docker run -v /etc/config:/config:ro myapp -> Option A
Quick Check:
Use :ro to share read-only volumes safely [OK]
Hint: Use ':ro' to protect shared data from container writes [OK]
Common Mistakes:
Confusing container read-only flag with volume read-only
Mounting volume as read-write by mistake
Thinking user ID affects volume write permissions
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.