2016-07-16 9 views
0

私は何か信じられないほど基本的なものを達成しようとしていますが、今は数晩にわたってこれを行っていますが、依然として堅実なソリューションを見つけていません。私はSOに関するいくつかの似たような話題を見つけて、そこにあったものに従いましたが役に立たなかったので、私は特定のケースでGitHubリポジトリを作成しました。私がやろうとしている何DockerがNodeJSアプリケーションでボリュームマッピングを作成

  • docker-compose up -dを使用して規定NodeJSアプリのことができるように(私はこの例では省略将来的にはさらに容器を追加する予定)
  • コードを経由してマッピングされていることを確認volumes私はいくつかのコードをローカルに変更するたびに再ビルドする必要はありません。

私の推測では、私が遭遇してる問題は、私は、フォルダを試したのバリエーションの一部では、たとえば、いくつかのファイルがコンテナ内/上書き失われる原因volumesのマッピングとは何かされています個々のファイルはマップされません。

私は問題を見てdocker-compose up -dをチェックアウトし、実行し、私の問題を説明するための簡単なレポを作成しました、コンテナが起因して死ぬ:

Error: Cannot find module '/src/app/app.js'

レポへのリンクはこちらです:https://github.com/josephmcdermott/nodejs-docker-issue PRは歓迎します。誰かが私のためにこれを解決できるなら、私は永遠に感謝しています。

UPDATE:

- app 
- - * (files I want to sync and regularly update) 
- app.js (initial script to call files within app/) 
- Dockerfile 
- docker-compose.yml 
- package.json 

FROM node:4.4.7 

RUN mkdir -p /src 
COPY . /src 
WORKDIR /src 
RUN npm install 

EXPOSE 3000 

CMD ["node", "/src/app.js"] 

ドッキングウィンドウ-compose.yml

app: 
    build: . 
    volumes: 
    - ./app:/src/app 

フォルダ構造

DockerfileをLDGするためのソリューションを次のコード、一種の感謝を参照してください。

+0

Fyiの場合、コードはここで(少なくとも関連する部分)投稿することができます(これは簡単にリンクすることを推奨します)。 – ldg

答えて

1

あなたの作成ファイルでは、最後の行- /src/app/node_modulesが以前のボリュームにマッピングされている可能性があります。/scr/appをマウントすると、そのリンクされたボリュームにnode_modulesが作成されます。だから、それは次のようになります。

app: 
    build: . 
    volumes: 
    - ./app:/src/app 

をリンクされたボリュームとしてあなたの全体/appディレクトリを維持したい場合は、コンテナの起動時にどちらかnpm installを行う必要があります(保証思われるそれはすべてのアップデートをピックアップ)またはをボリュームにリンクしておらず、Dockerfileを更新して/appディレクトリ全体をコピーしないでください。これはあなたに自己完結型のイメージを与えるので、これは素晴らしいことです。私は通常、この方法でNode.jsアプリケーションをDockerizeします。また、画像を確認するためにnpm testを適切に実行することもできます。

編集できるスクリプトファイルのリンクボリュームを作成する必要がある場合(またはアプリケーションが副作用を生成する場合)、そのディレクトリまたはファイルをDockerボリューム経由でリンクすることができます。

Btw、今後そのディレクトリの内容をコピーしないようにしたい場合は、それを追加してください。 dockerignore(および淋病)。

+0

こんにちは、お返事ありがとうございます。 私はあなたの提案を試みました。私はdocker-compose.ymlにボリュームを含めない限り「自己完結型」のイメージを正常に動作させることができますが、簡単な開発のためにディレクトリをマップしようとするとすぐにそれは「消える」。 私は同じgithubリポジトリにコミットしました(このような変更を加えることがわかっていたので、ここでコードを貼り付けるのではなく、githubリポジトリを使用したいと思います。 最新のバージョン「エラー:モジュールが見つかりません」/ app/someFile.js'' –

+0

これは今すぐ動作します。新規インストールを試しても問題が解決しない場合は、手順を説明してください。 – ldg

+0

ローカルと外部の違いは他の人を助けることです。 http://stackoverflow.com/help/how-to-askから: "...リンクして問題の生き生きした例を作りましょう。あなたの質問にコードを含めることもできます。外部サイトにアクセスし、リンクが時間をかけて壊れる可能性があります。 – ldg

関連する問題