2017-11-12 45 views
0

node.jsマイクロサービス用のドッキング・コンテナを作成中で、別のフォルダのローカル依存関係に問題があります。Docker + node_modules:Dockerfileを実行しようとしているときにローカル依存のエラーが発生しました

私が使用してnode_modulesフォルダへの依存関係を追加しました:次のように

npm install -S ../dependency1(module name). 

また、これはpackage.jsonのエントリを追加しました:

"dependency1": "file:../dependency1". 

私はdocker-compose up -dコマンドを実行すると、私は受け取ります折りたたみを示すエラー:

npm ERR! Could not install from "../dependency1" as it does not contain a package.json file. 

ドックRFILE:

FROM node:latest 

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

CMD [ "npm", "start" ] 
EXPOSE 3000 

ドッキングウィンドウ-compose.yml:私はこの問題が、どれを概説node_modulesフォルダとドッキングウィンドウと少数でシンボリックリンクの問題をまとめた記事が、解決策を提供するように見える見つけ

customer: 
    container_name: "app_customer" 
    build: 
     context: . 
     dockerfile: Dockerfile 
    volumes: 
     - .:/usr/src/app/ 
     - /usr/src/app/node_modules 
    ports: 
     - "3000:3000" 
    depends_on: 
     - mongo 
     - rabbitmq 

この問題。私はこの問題の解決法または本当に良い回避策を探しています。

答えて

1

Dockerビルドは、docker-compose.ymlファイルで定義されている.であるビルドコンテキスト外のファイルを参照できません。

docker buildは、ビルドコンテキスト内のすべてのファイルのtarバンドルを作成し、そのビルド用のDockerデーモンに送信します。コンテキストディレクトリの外にあるものはビルドに存在しません。

context: ../のビルドコンテキストを親ディレクトリに移動し、Dockerfileで参照するすべてのパスを一致させて一致させることができます。ビルドプロセスを遅くする可能性があるので、ビルドコンテキストを大きくしないように注意してください。

もう1つの方法は、プライベートnpmモジュールをscopeに公開することです。プライベートnpmレジストリは、あなたとビルドサーバーがアクセスして、依存関係を通常どおりインストールするプライベートnpmレジストリで可能です。

+0

私はdocker-compose.ymlを含む親フォルダにすべてのプロジェクトフォルダをコピーし、このフォルダにコンテキストを設定する必要があると言っていますか? – user1790300

+0

'docker-compose.yml'と同じディレクトリである必要はありません.yamlは' context: 'としてアクセスする必要のあるものすべてを含むディレクトリを参照するだけです。 – Matt

+0

' Dockerfile'はこの新しいコンテキストを考慮する必要があります。 – Matt