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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

2078閲覧

Docker - ディレクトリをコピーできない

S.N.

総合スコア21

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2018/07/22 04:55

やりたいこと

  • Dockerでnode.jsの開発環境を構築したく、CentOSイメージにローカルで作成したnode.jsアプリをコピーして展開したいです.
  • 配下のディレクトリにあるソースコードを丸々特定のディレトリにコピーしたいと考えています.
  • node.jsに限らず、Dockerfileに関する一般的な、初歩的な質問となってしまいます.

状況

ソースコードが、イメージに全くコピーされなかったです.Dockerfileは以下のように書きました.

Dockerfile

1FROM centos:7 2 3ENV APP_HOME = /app/nodejs 4 5RUN yum install -y epel-release && \ 6 yum install -y nodejs npm && \ 7 mkdir -p $APP_HOME 8# 問題の一行です。。 9COPY ./src $APP_HOME 10 11EXPOSE 3000 4000 12 13RUN cd $APP_HOME && npm install && ls -la 14 15CMD node app.js

ディレクトリを丸々コピーというのはできないもんなんでしょうか。。でもそんな不便ではないはずだと思うのですが。。
ディレクトリ構成は以下のようにしています.src配下に、必要なコード一式を配置しています.

RootDir ┣━Dockerfile ┗━src

RootDirでビルドを実行しました.

環境について

shell

1$ docker -v 2Docker version 18.03.0-ce, build 0520e24 3$ node -v 4v6.11.4

実行時のメッセージ

Step 1/7 : FROM centos:7 ---> 49f7960eb7e4 Step 2/7 : ENV APP_HOME = /app/nodejs ---> Using cache ---> 7461da6fb754 Step 3/7 : RUN yum install -y epel-release && yum install -y nodejs npm && mkdir -p $APP_HOME ---> Using cache ---> 3d3f54aa435f Step 4/7 : COPY . $APP_HOME ---> b64710ca54fe Step 5/7 : EXPOSE 3000 4000 ---> Running in e87a8591a0ac Removing intermediate container e87a8591a0ac ---> 154bc9b2a5ca Step 6/7 : RUN cd $APP_HOME && npm install && ls -la ---> Running in 113fa7580ccd npm WARN enoent ENOENT: no such file or directory, open '/=/package.json' npm WARN = No description npm WARN = No repository field. npm WARN = No README data npm WARN = No license field. total 12 drwxr-xr-x 1 root root 4096 Jul 22 04:41 . drwxr-xr-x 1 root root 4096 Jul 22 04:41 .. drwxr-xr-x 2 root root 4096 Jul 22 04:41 node_modules Removing intermediate container 113fa7580ccd ---> 0e08ad88dc04 Step 7/7 : CMD node app.js ---> Running in 93b8b8c07f82 Removing intermediate container 93b8b8c07f82 ---> d4e0a3ea5563 Successfully built d4e0a3ea5563 Successfully tagged node-webserver:1.0.0

見た感じ、狙ったディレクトリのコピーができていないようです.
package.jsonがない、と言われてますし。。
色々調べて見ましたが、ちょっとさっぱりわかりませんで、どなたかこういう方法があるよ、とかいいんじゃないか、とかご教示いただければ幸いです.

どうぞよろしくお願いいたします.

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

Dockerfile

1ENV APP_HOME = /app/nodejs

おそらくこの=の左右にスペースがあるのが間違いです。

リファレンスを見ると、この書き方だとAPP_HOMEに文字列= /app/nodejsが入ると思います。

投稿2018/07/29 22:40

Bakudankun

総合スコア173

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S.N.

2018/07/29 22:43

回答ありがとうございます。 そういうこと。。!なんですね。気づきも、知りもしませんでした。 大変参考になりました。毎回ディレクトリパスをフルパスで書くのが面倒だったので、とても助かりました。
guest

0

ベストアンサー

Dockerfileを見る限り、COPYは成功している可能性があると思います。

見た感じ、狙ったディレクトリのコピーができていないようです.

どんな確認方法をしたのでしょう?
docker run -ti {ビルドで生成されるイメージID} bash でコンテナの中に入れますので ls コマンドで確実に確認してみて下さい。

気になった点として、
Dockerファイルは

COPY ./src $APP_HOME

実行時ログは

COPY . $APP_HOME

となっていますが、どちらが正しいでしょうか?

投稿2018/07/22 05:58

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

S.N.

2018/07/22 06:34 編集

回答ありがとうございます。 docker run -ti {ビルドで生成されるイメージID} bash で実行できてなくても入れるんですね。。! デバッグできなくて困ってました。。 ログについては COPY . $APP_HOME が正でした. 何回か試していたのでぐちゃぐちゃになってしまっていました。 ちなみに、環境変数ではなく、絶対パスでアプリのディレクトリを作成したらコピーして実行までできました。 そのため、環境変数でのコピーの実行がダメだったようです。。 環境変数の書き方がおかしいんでしょうか。
退会済みユーザー

退会済みユーザー

2018/07/22 06:36

ひとまずやりたいことができたようでよかったです。 環境変数がなぜ効いてないのかはちょっと即答できないですね。
S.N.

2018/07/22 06:40

わざわざ回答いただき、ありがとうございました。 そうなんですよ、他のDockerfile(Javaアプリで)の時は同じようにできたので、不思議に思い質問した次第です。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問