{"componentChunkName":"component---src-templates-post-template-js","path":"/posts/best-way-to-setup-docker-volume","result":{"data":{"markdownRemark":{"id":"30c3408e-9edd-5f38-8b96-3e5bbd377947","html":"<p>Docker で構築した開発環境は再現性が高く、Windows でも macOS でも動くと思われています。</p>\n<p>基本的にはその通りなのですが、ホストのファイルシステムが絡んでくるボリュームについては、書き方次第で「Windows では動かない」となることがあります。</p>\n<p>この記事では、Windows でも macOS でも動く Docker のボリュームの書き方をまとめます。</p>\n<h2 id=\"検証した環境\" style=\"position:relative;\"><a href=\"#%E6%A4%9C%E8%A8%BC%E3%81%97%E3%81%9F%E7%92%B0%E5%A2%83\" aria-label=\"検証した環境 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>検証した環境</h2>\n<ul>\n<li>Docker for Windows (Windows 10, WSL2 backend)</li>\n<li>Docker for Mac (macOS Monterey, Apple M1)</li>\n</ul>\n<h2 id=\"docker-run-の場合\" style=\"position:relative;\"><a href=\"#docker-run-%E3%81%AE%E5%A0%B4%E5%90%88\" aria-label=\"docker run の場合 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>docker run の場合</h2>\n<p>docker run の場合と Docker Compose の場合でも書き方が異なるので、まずは docker run を使う場合について書いていきます。</p>\n<p>docker run するときは、Windows でも macOS でも同じ書き方で動きます。</p>\n<h3 id=\"一番よさそうな書き方\" style=\"position:relative;\"><a href=\"#%E4%B8%80%E7%95%AA%E3%82%88%E3%81%95%E3%81%9D%E3%81%86%E3%81%AA%E6%9B%B8%E3%81%8D%E6%96%B9\" aria-label=\"一番よさそうな書き方 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>一番よさそうな書き方</h3>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">docker run -v $PWD/mydir/subdir:/work ubuntu ls /work</code></pre></div>\n<p>docker run の -v オプションでホストのパスを指定する箇所では、<span class=\"katex\"><span class=\"katex-mathml\"><math xmlns=\"http://www.w3.org/1998/Math/MathML\"><semantics><mrow><mi>P</mi><mi>W</mi><mi>D</mi><mtext>や</mtext></mrow><annotation encoding=\"application/x-tex\">PWD や</annotation></semantics></math></span><span class=\"katex-html\" aria-hidden=\"true\"><span class=\"base\"><span class=\"strut\" style=\"height:0.68333em;vertical-align:0em;\"></span><span class=\"mord mathdefault\" style=\"margin-right:0.13889em;\">P</span><span class=\"mord mathdefault\" style=\"margin-right:0.13889em;\">W</span><span class=\"mord mathdefault\" style=\"margin-right:0.02778em;\">D</span><span class=\"mord cjk_fallback\">や</span></span></span></span>(pwd)、`pwd` を使って、絶対パスで書くのが一番よさそうです。</p>\n<h3 id=\"ng-な書き方\" style=\"position:relative;\"><a href=\"#ng-%E3%81%AA%E6%9B%B8%E3%81%8D%E6%96%B9\" aria-label=\"ng な書き方 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>NG な書き方</h3>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">docker run -v mydir/subdir:/work ubuntu ls /work</code></pre></div>\n<p>のように、相対パスで記述してしまうと、以下のようなエラーになります。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">docker: Error response from daemon: create myapp/subdir: &quot;myapp/subdir&quot; includes invalid characters for a local volume name, only &quot;[a-zA-Z0-9][a-zA-Z0-9_.-]&quot; are allowed. If you intended to pass a host directory, use absolute path.\nSee &#39;docker run --help&#39;.</code></pre></div>\n<p>ホストのディレクトリを指定する場合は絶対パスを使う必要があるためです。</p>\n<p>一応、「/」という文字を含まない以下のような形式であれば動作しますが、普段から絶対パスで指定するのが良いでしょう。</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">docker run -v mydir:/work ubuntu ls /work</code></pre></div>\n<h2 id=\"docker-compose-の場合\" style=\"position:relative;\"><a href=\"#docker-compose-%E3%81%AE%E5%A0%B4%E5%90%88\" aria-label=\"docker compose の場合 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>Docker Compose の場合</h2>\n<h3 id=\"一番よさそうな書き方-1\" style=\"position:relative;\"><a href=\"#%E4%B8%80%E7%95%AA%E3%82%88%E3%81%95%E3%81%9D%E3%81%86%E3%81%AA%E6%9B%B8%E3%81%8D%E6%96%B9-1\" aria-label=\"一番よさそうな書き方 1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>一番よさそうな書き方</h3>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\"><span class=\"token key atrule\">version</span><span class=\"token punctuation\">:</span> <span class=\"token string\">'3'</span>\n\n<span class=\"token key atrule\">services</span><span class=\"token punctuation\">:</span>\n  <span class=\"token key atrule\">nginx</span><span class=\"token punctuation\">:</span>\n    <span class=\"token key atrule\">image</span><span class=\"token punctuation\">:</span> nginx<span class=\"token punctuation\">:</span>1.21.6<span class=\"token punctuation\">-</span>alpine\n    <span class=\"token key atrule\">volumes</span><span class=\"token punctuation\">:</span>\n      <span class=\"token punctuation\">-</span> ./nginx/html<span class=\"token punctuation\">:</span>/usr/share/nginx/html</code></pre></div>\n<p>docker-compose.yaml の場合、相対パスで書くのが一番よさそうです。</p>\n<p>もしホームディレクトリを基準にしたい場合は、「~/mydir」のように指定してください。</p>\n<h3 id=\"ng-な書き方-1\" style=\"position:relative;\"><a href=\"#ng-%E3%81%AA%E6%9B%B8%E3%81%8D%E6%96%B9-1\" aria-label=\"ng な書き方 1 permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>NG な書き方</h3>\n<p>docker run で絶対パスを指定したのと同様に、</p>\n<div class=\"gatsby-highlight\" data-language=\"yaml\"><pre class=\"language-yaml\"><code class=\"language-yaml\">      <span class=\"token punctuation\">-</span> $PWD/nginx/html<span class=\"token punctuation\">:</span>/usr/share/nginx/html</code></pre></div>\n<p>と書きたくなると思います。</p>\n<p>しかし、この書き方では、Windows で</p>\n<div class=\"gatsby-highlight\" data-language=\"console\"><pre class=\"language-console\"><code class=\"language-console\">WARNING: The PWD variable is not set. Defaulting to a blank string.</code></pre></div>\n<p>という WARNING が出力される場合があり、その際は $PWD が空文字列として解釈されてしまいます。</p>\n<p>$PWD は Windows でも動く場合・動かない場合があり、詳細な再現条件は分からないですが、避けたほうが無難でしょう。</p>\n<h2 id=\"まとめ\" style=\"position:relative;\"><a href=\"#%E3%81%BE%E3%81%A8%E3%82%81\" aria-label=\"まとめ permalink\" class=\"anchor before\"><svg aria-hidden=\"true\" focusable=\"false\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\"><path fill-rule=\"evenodd\" d=\"M4 9h1v1H4c-1.5 0-3-1.69-3-3.5S2.55 3 4 3h4c1.45 0 3 1.69 3 3.5 0 1.41-.91 2.72-2 3.25V8.59c.58-.45 1-1.27 1-2.09C10 5.22 8.98 4 8 4H4c-.98 0-2 1.22-2 2.5S3 9 4 9zm9-3h-1v1h1c1 0 2 1.22 2 2.5S13.98 12 13 12H9c-.98 0-2-1.22-2-2.5 0-.83.42-1.64 1-2.09V6.25c-1.09.53-2 1.84-2 3.25C6 11.31 7.55 13 9 13h4c1.45 0 3-1.69 3-3.5S14.5 6 13 6z\"></path></svg></a>まとめ</h2>\n<p>以上をまとめると、</p>\n<ul>\n<li>docker run では「$PWD」などを使って絶対パスで指定する</li>\n<li>docker-compose.yaml では「.」や「~」を使って相対パスで指定する</li>\n</ul>\n<p>ということになります。</p>\n<p>これで今後は悩むことがなくなりそうです。</p>","fields":{"slug":"/posts/best-way-to-setup-docker-volume","tagSlugs":["/tag/docker/"],"autoRecommendPosts":["docker-books","udemy-docker-from-linux-and-networking","macos-virtualization","anyenv-asdf-docker"]},"frontmatter":{"date":"2022-06-24T16:18:29.984Z","description":"Docker で構築した開発環境は再現性が高く、Windows でも macOS でも動くと思われています。\n\n\n基本的にはその通りなのですが、ホストのファイルシステムが絡んでくるボリュームについては、書き方次第で「Windows では動かない」となることがあります。\n\nこの記事では、Windows でも macOS でも動く Docker のボリュームの書き方をまとめます。","tags":["docker"],"title":"Windows でも macOS でも動く Docker のボリュームの指定","socialImage":null,"recommendPosts":null}}},"pageContext":{"slug":"/posts/best-way-to-setup-docker-volume"}},"staticQueryHashes":["251939775","3942705351","401334301"]}