2016-08-19 7 views
0

ドッカーコンテナ内でnodejsアプリケーションを1つ実行しようとしています。私がドッカーコンテナに入ってアプリケーションを実行すると、すべてが期待どおりです。しかし、いったん私はドッカーのexecを使ってコマンドをコンテナに送ります。 というエラーが発生しました。TypeError:Object#にはメソッド 'execSync'がありません。どのようにノードアプリケーションのchild_prcessをドッカーコンテナから使用できますか?dockerコンテナ内で実行されているnodejsアプリケーション内でchild_processを使用する方法

[email protected]:/apps# cat test.js 
var aaa = require('child_process').execSync('echo "aaaaaaaaa"').toString().trim(); 
console.log(aaa); 
[email protected]:/apps# node test.js 
aaaaaaaaa 
[email protected]:/apps# 

[email protected]:~/$ docker exec containername bash -c "cd /apps;node test.js" 

/apps/test.js:1 
module, __filename, __dirname) { var aaa = require('child_process').execSync(' 
                    ^
TypeError: Object #<Object> has no method 'execSync' 
    at Object.<anonymous> (/apps/test.js:1:98) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 
    at startup (node.js:119:16) 
    at node.js:902:3 
[email protected]:~/$ docker exec containername bash -c "cd /apps/;cat test.js" 
var aaa = require('child_process').execSync('echo "aaaaaaaaa"').toString().trim(); 
console.log(aaa); 
+0

私はこれを 'docker run --rm -ti node:latest node'でテストしました。' require( 'child_process') 'は' execSync'が明示的に存在することを示しています。 –

答えて

0

execSync()v0.11.12 releaseで導入されました。

ノードのバージョンを確認してください。

docker exec containername bash -c "node -v" 
+0

nvm install node v4.2.3を使用して、/ usr/bin/nodeが古いバージョンであることを確認した後になります。私がやったことはソフトリンクを作っていて、今は大丈夫です。 [email protected]:$ドッカーexecコパイロットbash -c "/ usr/bin/nodejs -v" v0.10.25 [email protected]:$ドッカーexecコパイロットbash -c "どのノード" /usr/bin/node [email protected]:$ docker exec copilot bash -c "node -v" v4.2.3 – jacobcan118

関連する問題