0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Docker】-v バインドマウントでエラーが出る時の原因 no.16

Posted at

パンプキン カフェ (6).png

こんにちは、まゆみです。

Dockerについての記事をシリーズで書いています。

前回・前々回の記事で、『-vオプション』についての記事を書いてきました。

ただ、-vオプションの記事を読みながらコマンドをうっているはずなのに、上手くいかない場合もあると思います。

今回の記事では、-v オプションを使って、バインドマウントをした途端うまく行かなかった時にエラーとして最も考えられそうなことを書いていこうと思います。

では早速はじめて行きますね。

#『-v』バインドマウントでエラーが出てしまう時に考えられるエラー

『-v』でバインドマウントするまではうまく行っていたのに。。。.png

##local側に必要なdependencyがない。

順調にうまく進んでいたのに、『-v』オプションを付けて実行した瞬間上手くいかなくなった人は、まず、ローカルホスト側に『node_modules』など、ソースコードに必要なモジュールがあるかどうか確かめてください。(モジュールがある人は、今回の記事の内容には、あなたの求めている情報は書かれていないと思います。<(_ _)>)

2021-06-20_10-03-17.png

node.jsを使って何かアプリを作る時、必要なdependenciesは『package.json』に書かれていますよね。(下記のスクショ参考)

2021-06-20_10-51-28.png

localホスト側に、必要なdependenciesがないと、上手く実行されない原因になります

##localホスト側にnode_modulesが無いのがどうして原因なの?

Dockerfile で『RUN npm install』でインストールしてイメージを作っているのに、なぜ、localホストにnode_modulesがないといけないの??

そんな疑問がわいてくるかも知れません。

一言でその答えを書くと『-v バインドマウント』で、DockerfileでCOPY した内容が全て上書きされるからです。

2021-06-20_10-31-50.png

ですが、その後

-v <マウントさせたいフォルダー> : <Container側のフォルダー>

build context全体をマウントさせると、先ほどDockerfileでCOPY したファイルを全て上書きするような形になってしまうのです。

ちょうど下記のイラストのような状況になります

1.png

そうすると、localホスト側に『node_modules』がないのが、エラーの原因になってしまいます。

#解決方法

Host (3).png

上記のことが原因で『-v』でマウントした瞬間上手くいかなくなった場合、

Anonymous Volume を使う

と解決する事ができます。

##Anonymous Volumeって何?

Anonymous Volumeは前回の記事で、Named Volumeと比較しながら軽く説明させていただいていました。

Named (名前の付けられた)
Anonymous (匿名の)

という言葉が示している通り、Anonymous Volumeは

そのContainerに付属して作られた

他のContainerとは共有のできないVolume

になります

今回の記事で取り上げているような原因でバインドマウントがうまく行かなくなった時、Anonymous Volumeを使って解決します。

具体的なコマンドを示します。

下記のコマンドになります。

-v /app/node_modules

Named Volumeでは、:(コロン)をはさんで、ホスト側のディレクトリとContainer側のディレクトリーを指定しました。

-v <ホスト側> : <container側>

『Container側のディレクトリーから、ホスト側のディレクトリ―を参照してくれ』ということですね。

ただ、Anonymous Volumeは:(コロン)を書かず、Container側のディレクトリ―のみ指定します。

Anonymous Volumeを使うと『Containerの外の物を参照するな。Container側の指定されたディレクトリーをそのままプレイスフォルダーとして使ってくれ』という意味になります。

2021-06-20_11-33-56.png

上記のスクショのようにコマンドを実行しました。

そしてlocalホスト側を見ると『node_modules』があるように表示されています

2021-06-20_11-36-38.png

#まとめ

今回の記事はここで締めくくらせていただきます。

『-v』は理解に苦しんだところなのですが、1週間かけて、理解する事ができました。

少しでもこの記事が役に立てれば幸いです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?