📖 Scenario: You are working on a web application project. You want to run your app inside a Docker container but keep your code on your computer. This way, when you change your code, the container sees the changes immediately without rebuilding.
🎯 Goal: Learn how to use Docker bind mounts to link your local project folder to a folder inside the container for easy development.
📋 What You'll Learn
Create a Docker container running a simple web server
Use a bind mount to connect your local project folder to the container
Verify that changes in your local files reflect inside the container
💡 Why This Matters
🌍 Real World
Developers often use bind mounts to work on code locally while running it inside containers. This speeds up testing and debugging.
💼 Career
Knowing how to use bind mounts is essential for DevOps roles and developers working with Docker in real projects.
Progress0 / 4 steps
1
Create a simple Docker container
Write a docker run command to start a container named webdev using the nginx image. Run it in detached mode with port 8080 on your computer mapped to port 80 inside the container.
Docker
Hint
Use docker run -d --name webdev -p 8080:80 nginx to start the container.
2
Add a bind mount to link your local folder
Modify the docker run command to add a bind mount. Mount your local folder /home/user/myapp to /usr/share/nginx/html inside the container. Keep the container name webdev, detached mode, and port mapping the same.
Docker
Hint
Add -v /home/user/myapp:/usr/share/nginx/html to the docker run command.
3
Restart the container with the bind mount
Stop and remove the existing webdev container. Then run the updated docker run command with the bind mount from Step 2 to start the container again.
Docker
Hint
Use docker stop webdev and docker rm webdev to remove the old container before running the new one.
4
Verify bind mount works by checking container files
Run a command inside the webdev container to list the files in /usr/share/nginx/html. Use docker exec with ls -l /usr/share/nginx/html. Print the output.
Docker
Hint
Use docker exec webdev ls -l /usr/share/nginx/html to see the files inside the container folder.
Practice
(1/5)
1. What is the main purpose of using bind mounts in Docker during development?
easy
A. To automatically update Docker itself
B. To link files or folders from the host machine directly into the container for live editing
C. To isolate the container completely from the host file system
D. To create a new Docker image from a container
Solution
Step 1: Understand bind mounts concept
Bind mounts connect a folder or file on your computer (host) directly into the container, so changes on the host reflect immediately inside the container.
Step 2: Identify the purpose in development
This allows developers to edit code on their computer and see the changes live inside the container without rebuilding the image.
Final Answer:
To link files or folders from the host machine directly into the container for live editing -> Option B
Quick Check:
Bind mounts = live code sync [OK]
Hint: Bind mounts sync host files live inside containers [OK]
Common Mistakes:
Confusing bind mounts with Docker image creation
Thinking bind mounts isolate container from host
Assuming bind mounts update Docker software
2. Which of the following is the correct syntax to create a bind mount in Docker CLI?
easy
A. docker run --mount /host/path:/container/path image_name
B. docker run -mount bind:/host/path:/container/path image_name
C. docker run -bind /host/path:/container/path image_name
D. docker run -v /host/path:/container/path image_name
Solution
Step 1: Recall Docker bind mount syntax
The correct way to specify a bind mount is using the -v or --volume flag with the format host_path:container_path.
Step 2: Check each option
docker run -v /host/path:/container/path image_name uses -v /host/path:/container/path which is correct. Options A, C, and D use incorrect flags or syntax.
Final Answer:
docker run -v /host/path:/container/path image_name -> Option D
Quick Check:
Bind mount syntax = -v host:container [OK]
Hint: Use -v host_path:container_path for bind mounts [OK]
Common Mistakes:
Using --mount without correct syntax
Using non-existent flags like -bind
Mixing mount types incorrectly
3. Given the command: docker run -it -v /home/user/app:/app ubuntu bash What will happen if you edit a file inside /home/user/app on the host while the container is running?
medium
A. The changes will appear immediately inside the container's /app directory
B. The container will crash due to file conflicts
C. The changes will not reflect inside the container until it is restarted
D. The container will create a copy of the file and ignore host changes
Solution
Step 1: Understand bind mount behavior
The -v /home/user/app:/app option mounts the host folder directly into the container, so files are shared live.
Step 2: Effect of editing host files
Editing files on the host folder /home/user/app will immediately reflect inside the container at /app because of the live bind mount.
Final Answer:
The changes will appear immediately inside the container's /app directory -> Option A
Quick Check:
Host edits = instant container updates [OK]
Hint: Host file edits show instantly inside container [OK]
Common Mistakes:
Thinking container needs restart to see changes
Assuming container crashes on file edits
Believing container copies files instead of sharing
4. You run this command but changes on your host folder are NOT visible inside the container: docker run -v app:/app ubuntu What is the most likely problem?
medium
A. You used a named volume instead of a bind mount with an absolute host path
B. The container image ubuntu does not support volumes
C. You forgot to add the -it flags
D. The container is missing the /app directory
Solution
Step 1: Analyze the volume syntax
The command uses -v app:/app which creates a named volume called 'app', not a bind mount from the host.
Step 2: Understand bind mount requirement
Bind mounts require an absolute host path like /home/user/app. Using just 'app' creates a Docker-managed volume, so host folder changes won't reflect.
Final Answer:
You used a named volume instead of a bind mount with an absolute host path -> Option A
Quick Check:
Bind mounts need absolute host paths [OK]
Hint: Use absolute host path for bind mounts, not volume names [OK]
Common Mistakes:
Confusing named volumes with bind mounts
Forgetting absolute path on host
Assuming all volumes sync host files
5. You want to develop a Node.js app inside Docker using bind mounts. Your host code is in /home/dev/myapp. Which command correctly sets up the container so that: - The host code is live inside /usr/src/app in the container - The container runs npm start - You can edit code on host and see changes immediately
Choose the best command:
hard
A. docker run -v /home/dev/myapp:/usr/src/app node npm start
B. docker run -v /home/dev/myapp node npm start
C. docker run -v /home/dev/myapp:/usr/src/app -w /usr/src/app node npm start
D. docker run -v /usr/src/app:/home/dev/myapp node npm start
Solution
Step 1: Check bind mount and working directory
docker run -v /home/dev/myapp:/usr/src/app -w /usr/src/app node npm start uses -v /home/dev/myapp:/usr/src/app to bind mount the host folder to the container path, and -w /usr/src/app to set the working directory inside the container.
Step 2: Confirm command and live editing
Running npm start inside the container's working directory ensures the app runs with live code from the host. docker run -v /home/dev/myapp:/usr/src/app node npm start misses the working directory, docker run -v /home/dev/myapp node npm start has incorrect volume syntax (missing container path), and docker run -v /usr/src/app:/home/dev/myapp node npm start reverses paths incorrectly.
Final Answer:
docker run -v /home/dev/myapp:/usr/src/app -w /usr/src/app node npm start -> Option C
Quick Check:
Bind mount + correct workdir + command = docker run -v /home/dev/myapp:/usr/src/app -w /usr/src/app node npm start [OK]
Hint: Set -v host:container and -w container for live dev [OK]
Common Mistakes:
Omitting working directory (-w) for commands
Reversing host and container paths
Not specifying full host path for bind mount
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.