2016-07-20 2 views
-1

私のプロジェクトは、このような設定である:'docker build'は 'docker run'がエラーになりません。それらはどう違いますか?

./ - 
    Dockerfile 
    package.json 
    build 
    compiled files from frontend and backend directories get put here 
    backend 
    app.js 
    frontend 
    frontend files... 
    scripts 
    startServer.sh 
    build.sh 

startServer.sh:

docker build ../ --tag myImage 

# The build script compiles all my assets and places 
# them in the top level 'build' directory which i am 
# trying to link to my docker image so I can recompile 
# on each file change and have the changes show in the docker image. 
./build.sh 

docker run --volume /path/to/build/dir:/src/app myImage 

Dockerfile:

FROM node:4.4.7 
RUN ls src/app 

たときにビルドコマンドDockerfileでRUNコマンドは私にこのエラーが発生しますstartServerスクリプトの名前は

です。

RUNをCMDに変更すると、エラーは発生しません。また、ビルド後にエラーが発生しても、ビルドが終了し、ドッカーの実行コマンドでエラーは発生しません。

  1. 'docker build'コマンドは実際にコンテナを起動するイメージに 'build'フォルダを追加しようとしていますか?それとも、画像を作成するときに使用するコマンドをコンパイルするだけですか?

  2. どちらの場合でも動作するビルドと実行の両方に使用されるDockerfileを後で作成するにはどうすればよいですか?

私はドッカーとの重要な概念が欠落する可能性があるような気がしますが、私はチュートリアルやドキュメントを経てきたし、これを解決することができませんでした。あなたがドッキングウィンドウのイメージを実行すると

答えて

1

にあなたのドッキングウィンドウのファイルを編集し、これが予想されるエラーです。ノードイメージでは、自分の/usr/src/appをビルドにCOPYのステップで追加するか、ビルドの完了後にボリュームマッピングを追加することが期待されます。

RUNを実行すると、作成されたイメージにレイヤーを追加するステップがあるので、新しいコンテンツでイメージを変更していないので、lsは意味がありません。

CMDは1がdocker runの終わりに渡されない場合に実行するデフォルトのコマンドを与えるので、あなたはdocker run node /bin/bashをすれば、ls src/app CMDが実行されることはありません。これはビルドの他のステップの後にも実行され、ボリュームマウント後にコンテナで実行されている可能性があります。これによりこのフォルダが作成されます。

+0

今すぐ取得します。ありがとう! – Henry

1

は、あなたが/src/app

へのデータボリュームをマウントしかし、ドッキングウィンドウのスクリプトでは、デフォルトの作業ディレクトリがルートではないのでsrc/app
にアクセスしようとしました。 srcディレクトリにアクセスすることはできません。

ので、ノード画像にはsrc/appフォルダがありません

FROM node:4.4.7 
RUN ls /src/app 
関連する問題