質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.96%

Dockerで、共通フォルダ(-v)を作る場合でのみ生じる問題に困っています。

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 221

teilmari

score 7

お世話になります。
Windows 10 Home
Visual Studio Code (PowerShell)
Docker ToolBox (DockerToolbox-18.09.0)
を使用しております。

ReactをDockerで使用するのに、
ホスト(Windows10)とゲスト(alpine)間で、共通フォルダとDockerが上手く動作せず困っています・・・。

共通フォルダを作らない(-vを使用しない)場合ですと、Dockerは問題なく動作します。
具体的には、作成したコンテナのalpine内でcreate-react-app test1 コマンドを打ち、
Reactのtest1ディレクトリが作成され、
ホスト側(Windows10)のブラウザのlocalhostからも問題なくReact Appが表示されます。

しかし、docker run 時に -v コマンドにより、
ホストとゲストで共通フォルダ(docker-common)を作成すると失敗してしまいます。
ゲスト内からのcreate-react-app test1 コマンドより、
ホスト(Windows10)のdocker-commonフォルダに
test1というディレクトリが最初は作られるのですが、
create-react-appが進むにつれ途中でnpmにエラーが起き、
test1ディレクトリがホストのdocker-commonフォルダからも削除されてしまいます。
詳細は以下になります。

Dockerfileに

FROM alpine
ENV wkdir docker-common
WORKDIR /usr/app/$wkdir
RUN apk add nodejs
RUN apk add npm
RUN npm i -g create-react-app
ENTRYPOINT sh


を記述し、

docker build -t react-01 .


よりreact-01というImageを作成し、

docker run -it --name my-app-1 -p 3000:3000
-v //d/programming/docker/docker-common:/usr/app/docker-common react-01


というrunコマンドでmy-app-01という名のコンテナを作成しました。
Dockerfileよりすでにnpmもcreate-react-appも作られているので、
create-react-app test1 と入力し、
test1という名のReactディレクトリを作成したいのですが・・・以下のエラーが表示され叶いません。

#Dockerfileよりコンテナを作成
PS D:\programming\docker\dockerfiles> docker run -it --name my-app-1 -p 3000:3000 -v //d/programming/docker/docker-common:/usr/app/docker-common react-01   

#コンテナが作成されその中に自動で入る
#create-react-app test1 と打ち、test1というReactディレクトリをnpmより作成
/usr/app/docker-common # create-react-app test1

Creating a new React app in /usr/app/docker-common/test1.

#ホスト(windows10)のdocker-commonフォルダ内にtest1ディレクトリを視認

Installing packages. This might take a couple of minutes.
Installing react, react-dom, and react-scripts...

#しかし、ここで突然エラーが・・・
npm ERR! path /usr/app/docker-common/test1/node_modules/@hapi/topo/node_modules/@hapi/hoek/package.json.769352676
npm ERR! code ENOENT
npm ERR! errno -2
npm ERR! syscall open
npm ERR! enoent ENOENT: no such file or directory, open '/usr/app/docker-common/test1/node_modules/@hapi/topo/node_modules/@hapi/hoek/package.json.769352676'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2019-08-10T19_09_04_454Z-debug.log

Aborting installation.
npm install --save --save-exact --loglevel error react react-dom react-scripts has failed.

#ホスト(Windows10)のdocker-common内に作られていたtest1ディレクトリが削除されてしまう
Deleting generated file... node_modules
Deleting generated file... package.json
Deleting test1/ from /usr/app/docker-common
Done.

#失敗に終わる
/usr/app/docker-common # 

最初にも申し上げた様に、共通フォルダを作らない(-vを使用しない)場合ですと、
create-react-appにはこのエラーは起きずReact Appが作成されます。
create-react-appコマンドではなく、mkdirコマンドで適当なディレクトリを作る分には、
ちゃんと作成されホストのdocker-common内にもmkdirフォルダ(ディレクトリ)は表示されます。
npmもnode.jsも最新版にアップデートをしても同じでした。

長くなってしまい申し訳ありません。
心当たりのある方がもしいらしたら、どうぞ宜しくお願い致します。
ここまでお読みいただきありがとうございました。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正の依頼

  • gentaro

    2019/08/11 06:30

    エラーメッセージに出てる
    /root/.npm/_logs/2019-08-10T19_09_04_454Z-debug.log
    の中身は確認されたんですかね

    キャンセル

  • mokemokechicken

    2019/08/11 10:06

    @hapi という名前が悪いんですかね...?
    素朴な疑問なんですが、 windowsは @hapi のようなフォルダ名はOKなんでしょうか?

    キャンセル

  • gentaro

    2019/08/11 12:21

    少なくともDocker for Windowsでは動きました。
    Docker Toolboxに固有の問題ならちょっと試せないのでわかりませんけど。

    キャンセル

まだ回答がついていません

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.96%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる