2017-12-01 32 views
0

以下は、jsアプリをpm2で起動するための非常に単純なprocess.jsonです。node.js + pm2 - 環境に応じてnode_argsを設定する

私の目標は、プロセスがnode_argsにキックオフされることですが、の非プロダクトのみがに開始されます。したがって、たとえば、特定の環境変数が特定の方法で設定されている場合は、node_argsをトリガーします。それ以外の場合は無視します。

これは可能ですか?そうでない場合は、私ができる回避策はありますか?

{ 
    apps : [ 
    { 
     name  : 'API', 
     script : './app.js', 
     node_args: ["--inspect","--debug=0.0.0.0:7000"], 
     env: { 
     NODE_ENV: 'development' 
     } 
    } 
    ] 
} 

しかし私は、目標はそれが本当に実行可能ではないですので、「実行」コマンドは、ソースイメージに静的ですドッキングウィンドウでこれを実行することです、コマンドラインでnode_argsをスローすることも可能だということを知っています。あなたは、その環境設定によっては、同じアプリの複数の宣言を定義することができます

CMD [ "pm2-docker", "--auto-exit", "--watch", "process.json"]

答えて

0

:ここ

は私のDockerfileでCMDエントリです。

次のようにあなたのケースでは、あなたのプロセスファイルの定義をすることができます:

process.json

{ 
    apps : [ 
    { 
     name  : 'API-DEV', 
     script : './app.js', 
     node_args: ["--inspect","--debug=0.0.0.0:7000"], 
     env: { 
     NODE_ENV: 'development' 
     } 
    }, 
    { 
     name  : 'API-PROD', 
     script : './app.js', 
     env: { 
     NODE_ENV: 'production' 
     } 
    } 
    ] 
} 

を次にアプリのdevelopmentバージョンのCMDエントリを実行したい場合は、 Dockerfile

CMD [ "pm2-docker", "start", "process.json", "--only", "API-DEV", "--auto-exit", "--watch" ] 

となります。重複が気に入らない場合は、電子.config.jsファイルの代わりに、jsonこの

process.config.js

const appDefs = [ 
    { 
    "suffix": "prod", 
    "node_args": [], 
    "env": { 
     "NODE_ENV": "production" 
    } 
    }, 
    { 
    "suffix": "dev", 
    "node_args": ["--inspect","--debug=0.0.0.0:7000"], 
    "env": { 
     "NODE_ENV": "development" 
    } 
    } 
]; 

module.exports = { 
    "apps": appDefs.map(appDef => ({ 
    "name": `API-${appDef.suffix}`, 
    "script": "./app.js", 
    "node_args": appDef.node_args, 
    "env": appDef.env 
    })) 
}; 

のようなあなたの設定を定義し、CMDエントリは

CMD [ "pm2-docker", "start", "process.config.js", "--only", "API-DEV", "--auto-exit", "--watch" ] 
+0

おかげだろう。だから私は別の 'CMD'エントリのために別々のイメージが必要になるでしょうか?同じソースイメージを持っているのはいいですし、コンテナを起動するときに環境を設定することは可能でしょうか? – emmdee

+0

私はドッカーの専門家ではありませんが、私が理解していることは、 'docker run'コマンドを実行している間に' CMD'エントリに異なる値を渡したいと思うことです。その場合、私は[this](https://stackoverflow.com/questions/40873165/use-docker-run-command-to-pass-arguments-to-cmd-in-dockerfile)は問題を解決すると思います – SALEH

関連する問題