{"id":364005,"date":"2021-11-08T16:46:04","date_gmt":"2021-11-08T13:46:04","guid":{"rendered":"https:\/\/en.buradabiliyorum.com\/how-to-mount-a-host-directory-into-a-docker-container-cloudsavvy-it\/"},"modified":"2021-11-08T16:46:04","modified_gmt":"2021-11-08T13:46:04","slug":"how-to-mount-a-host-directory-into-a-docker-container-cloudsavvy-it","status":"publish","type":"post","link":"https:\/\/buradabiliyorum.com\/en\/how-to-mount-a-host-directory-into-a-docker-container-cloudsavvy-it\/","title":{"rendered":"#How to Mount a Host Directory Into a Docker Container \u2013 CloudSavvy IT"},"content":{"rendered":"<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter ez-toc-custom ez-toc-container-direction\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<label for=\"ez-toc-cssicon-toggle-item-6a2e66badc6aa\" class=\"ez-toc-cssicon-toggle-label\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #dd3333;color:#dd3333\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #dd3333;color:#dd3333\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/label><input type=\"checkbox\"  id=\"ez-toc-cssicon-toggle-item-6a2e66badc6aa\" checked aria-label=\"Toggle\" \/><nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-mount-a-host-directory-into-a-docker-container-cloudsavvy-it\/#Why_Mount_From_The_Host\" >Why Mount From The Host?<\/a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-mount-a-host-directory-into-a-docker-container-cloudsavvy-it\/#macOS_Compatibility\" >macOS Compatibility<\/a><\/li><\/ul><\/li><\/ul><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-mount-a-host-directory-into-a-docker-container-cloudsavvy-it\/#Mounting_a_Host_Directory\" >Mounting a Host Directory<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/buradabiliyorum.com\/en\/how-to-mount-a-host-directory-into-a-docker-container-cloudsavvy-it\/#Mounting_Single_Files\" >Mounting Single Files<\/a><\/li><\/ul><\/nav><\/div>\n<p><strong>&#8220;#How to Mount a Host Directory Into a Docker Container \u2013 CloudSavvy IT&#8221;<\/strong><\/p>\n<div id=\"article-content-area\">\n<img loading=\"lazy\" decoding=\"async\" class=\"type:primaryImage alignnone size-full wp-image-14169\" srcset=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2021\/09\/993634a1.png?width=398&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1 400w, https:\/\/www.cloudsavvyit.com\/p\/uploads\/2021\/09\/993634a1.png?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1 1200w\" sizes=\"auto, 400w, 1200w\" src=\"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2021\/09\/993634a1.png?width=1198&amp;trim=1,1&amp;bg-color=000&amp;pad=1,1\" alt=\"\" width=\"1200\" height=\"675\" onload=\"pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\" onerror=\"this.onerror=null;pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon(this);\"\/><\/p>\n<p>Docker provides tools to bridge the filesystems of containers and the host operating system running the container, such as bind mounts and volumes. These can be very useful both in development and production environments.<\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Why_Mount_From_The_Host\"><\/span>Why Mount From The Host?<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p><a href=\"https:\/\/buradabiliyorum.com\/en\/category\/general\/\" data-internallinksmanager029f6b8e52c=\"3\" title=\"General\" target=\"_blank\" rel=\"noopener\">General<\/a>ly, with Docker, you\u2019d want images to run independently of the host system. If you wanted to, for example, update an <a href=\"https:\/\/buradabiliyorum.com\/en\/category\/download-scripts-themes-apps\/\" data-internallinksmanager029f6b8e52c=\"9\" title=\"Download Scripts &amp; Themes &amp; Apps\" target=\"_blank\" rel=\"noopener\">app<\/a>\u2019s code or configuration files, you\u2019d likely want to build a new version of the container and re-deploy. This allows you to quickly scale and move images without worrying about the hardware they run on.<\/p>\n<p>However, in a dev environment, being able to directly mount a directory to enable hot-reloading of config or code can be very useful. For example, you may be working on a JS file or PHP plugin that you can just drag-and-drop into the container. Or you may want to mount an entire NGINX config directory to work on your website. Whatever your use case, mounting files isn\u2019t a bad solution.<\/p>\n<p>It\u2019s also useful in production, if you have host services that depend on files in containers. For example, you may have a log ingestion and aggregation service that would prefer if the container\u2019s log files were in a directory accessible from the host. While there are likely some pure in-Docker solutions to your problems, sometimes it\u2019s simpler to just mount a volume.<\/p>\n<h4><span class=\"ez-toc-section\" id=\"macOS_Compatibility\"><\/span>macOS Compatibility<span class=\"ez-toc-section-end\"><\/span><\/h4>\n<p>Note: since mounts are handled through the Docker API, they will work regardless of the host OS. However, macOS has extra protections, and mounts outside of a few host directories <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/docs.docker.com\/desktop\/mac\/\">may fail with \u201cmounts denied\u201d at runtime<\/a>. This includes <code>\/Users<\/code>, which covers most operations, but if you need to you can <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/docs.docker.com\/desktop\/mac\/troubleshoot\/#volume-mounting-requires-file-sharing-for-any-project-directories-outside-of-users\">fix this in the Docker settings under Preferences &gt; Resources &gt; File Sharing<\/a>\u00a0by adding the target directory to the list.<\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Mounting_a_Host_Directory\"><\/span>Mounting a Host Directory<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Creating a bind mount is pretty simple. Add it with the <code>--mount type=bind<\/code>\u00a0flag at startup, specifying a source and target directory to mount to.<\/p>\n<pre>docker run -d &#13;\n-it &#13;\n--name container &#13;\n--mount type=bind,source=\/nginxconfig,target=\/etc\/nginx &#13;\nnginx:latest<\/pre>\n<p>Bind mounts are the simplest, but Docker does provide the Volume API for managing these kinds of mounts a little better. The data stored will be managed by Docker, and the volume directory will be created automatically in Docker\u2019s directory. This may not be what you want if you have an existing directory in mind, but this method is better since it doesn\u2019t depend on the file structure of the host OS.<\/p>\n<pre>docker volume create nginx-config&#13;\n&#13;\ndocker run -d &#13;\n--name devtest &#13;\n--mount source=nginx-config,target=\/etc\/nginx &#13;\nnginx:latest<\/pre>\n<p>You can also use Docker Compose to define volumes:<\/p>\n<pre>version: \"3.0\"&#13;\nservices:&#13;\n  web:&#13;\n    image: nginx:latest&#13;\n    ports:&#13;\n      - \"80:80\"&#13;\n    volumes:&#13;\n      - nginx-config:\/etc\/nginx\/&#13;\nvolumes:&#13;\n  nginx-config:<\/pre>\n<p>These are stored in a standard format accessible to Linux:<\/p>\n<pre>\/var\/lib\/docker\/volumes\/volumeID\/_data<\/pre>\n<p>However, on macOS, you will need to <a rel=\"nofollow noopener\" target=\"_blank\" href=\"https:\/\/stackoverflow.com\/a\/56550330\">connect to the Docker virtual machine to be able to view volumes<\/a>.<\/p>\n<p><strong>RELATED:<\/strong> <strong><em>What Are Docker Volumes, and How Do You Use Them?<\/em><\/strong><\/p>\n<h2 role=\"heading\" aria-level=\"2\"><span class=\"ez-toc-section\" id=\"Mounting_Single_Files\"><\/span>Mounting Single Files<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Mounting entire directories works well when you want to edit a lot of config\/code files that are stored on the host. However, sometimes you might just want to mount a single file to edit, without touching the other files.<\/p>\n<p>To do this, you can run the container with a bind mount, which support individual files if you specify the path:<\/p>\n<pre>docker run -it &#13;\n--mount type=bind,source=\/path\/file.cfg,target=\/etc\/example\/file.cfg &#13;\nnginx sh<\/pre>\n<p>If you have a lot of files to mount this way, you can put them all in the same host directory, and mount that directory to a\u00a0different location in the container. You can then use symlinks inside the container to link files in the mounted directory to the proper location.\n<\/p><\/div>\n<blockquote><p><strong><span style=\"color: #ff6600;\">If you liked the article, do not forget to share it with your friends. Follow us on\u00a0<span style=\"color: #ff0000;\"><a style=\"color: #ff0000;\" href=\"https:\/\/news.google.com\/publications\/CAAqBwgKMLG0nwswvr63Aw\" target=\"_blank\" rel=\"nofollow noopener noreferrer\">Google News<\/a><\/span>\u00a0too, click on the star and choose us from your favorites.<\/span><\/strong><\/p><\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\">For forums sites go to <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/forum.buradabiliyorum.com\/\" target=\"_blank\" rel=\"noopener\">Forum.BuradaBiliyorum.Com<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<blockquote>\n<p style=\"text-align: center;\"><strong>If you want to read more like this article, you can visit our <span style=\"color: #ff9900;\"><a style=\"color: #ff9900;\" href=\"https:\/\/en.buradabiliyorum.com\/technology\/\" target=\"_blank\" rel=\"noopener\">Technology category.<\/a><\/span><\/strong><\/p>\n<\/blockquote>\n<p><span style=\"color: black;\"><a style=\"color: #ff9900;\" href=\"https:\/\/www.cloudsavvyit.com\/14425\/how-to-mount-a-host-directory-into-a-docker-container\/\" target=\"_blank\" rel=\"noopener\">Source<\/a><\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>&#8220;#How to Mount a Host Directory Into a Docker Container \u2013 CloudSavvy IT&#8221; Docker provides tools to bridge the filesystems of containers and the host operating system running the container, such as bind mounts and volumes. These can be very useful both in development and production environments. Why Mount From The Host? Generally, with Docker,&#8230;<\/p>\n","protected":false},"author":1,"featured_media":364006,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"https:\/\/www.cloudsavvyit.com\/p\/uploads\/2021\/09\/993634a1.png","fifu_image_alt":"","footnotes":""},"categories":[18],"tags":[],"class_list":["post-364005","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-technology"],"_links":{"self":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/364005","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/comments?post=364005"}],"version-history":[{"count":0,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/posts\/364005\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media\/364006"}],"wp:attachment":[{"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/media?parent=364005"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/categories?post=364005"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/buradabiliyorum.com\/en\/wp-json\/wp\/v2\/tags?post=364005"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}