2016-08-16 5 views
1

jsファイルの縮小版を使用してプロダクションドッカーコンテナを構築しようとしています。docker-composeビルドプロセス中にwebpackビルドを実行します。

私のDockerfileでは、npmパッケージをインストールした後、webpackコンパイルを構築しようとしています。

RUN npm install -g n # upgrading the npm version 
RUN n stable 
ADD ./webpack/package.json /package.json 
RUN npm install --production 
RUN npm run build-production # <<< Fails here 

ドッキングウィンドウのビルドプロセスには(NODE_PATHが設定されている)、それがインストールされたパッケージを見つけることができないという不満をNPMとの最後のコマンドRUN npm run build-production中に失敗します。

ただし、のスクリプトをENTRYPOINTスクリプトに追加すると、正常に動作し、すべてが正常にコンパイルされます。しかし、それはwebpackを実行して、コンテナを開始するすべてのものをビルドします。これは望ましくありません。

前回のステップでインストールしたパッケージを最後のドッキング・ビルド・ステップで見つけることができないのはなぜですか?しかし、なぜそれがエントリポイントのスクリプトを介して動作しますか?

私のDockerfileのドッカービルドにwebpackビルドを追加する最も良い方法は何ですか?

+0

正確なエラーメッセージが表示されますか? 'build-production'のための彼の依存関係の一つが' devDependencies'の下にリストされている可能性はありますか?それはそれが見つからないのですか? '--production'フラグのためにインストールされていませんか?実行時にボリュームを使用していますか? – dnephin

+0

@dnephinご意見ありがとうございます。すべてのパッケージは '--production'の依存関係に含まれています。私も '--production'なしで同じエラーが発生します。はい、ボリュームを使用しています。ビルド中にアクセスできないのですか? – neurix

+0

いいえ、ボリュームはビルド中にアクセスできません。 – dnephin

答えて

3

これは

0

問題がbuild-productionがインストールされていないdevDependenciesを、必要なことかもしれない助けるべきである代わりに、あなたの

RUN npm run build-production # <<< Fails here 

RUN bash -l -c 'npm run build-production' 

を使用してください。

プロダクションイメージを小さく保つための良い方法は、dobiのようなツールを使用することです。これは、devのコンテナでビルドタスクを実行し、すべてを1つのコマンドですべてプロダクションイメージにまとめることを容易にします。

以下は、あなたに役立つ例dobi.yamlです。

meta: 
    project: some-project-name 

image=builder: 
    image: myproject-dev 
    context: dockerfiles/ 
    dockerfile: Dockerfile.build 

image=production: 
    image: user/prod-image-name 
    context: . 
    depends: [build] 

mount=source: 
    bind: . 
    path: /code 

run=build: 
    use: builder 
    mounts: [source] 
    command: "npm run build-production" 
    artifact: path/to/minified/assets 

dobi productionを実行すると、古くなったタスクが実行されます。変更されたソースファイルがない場合、タスクはスキップされます。 depends: [build]は、ビルドステップが常に最初に実行されることを保証します。