ここにはたくさんの良い提案があります。追加したいことの1つ:
phantomjs dockerイメージを実行していましたが、デフォルトのユーザーはrootではなく「phantomjs」でした。したがって、許可されていない場所に書き込もうとしていました(Dockerホストのpwdでした)...
> docker run -i -t -v $(pwd):/pwd --rm wernight/phantomjs touch /pwd/foo.txt
touch: cannot touch '/pwd/foo.txt': Permission denied
上記のコードはすべてエラーなしで実行されますが、宛先に書き込む権限がない場合は、要求を黙って無視します...
したがって、たとえば、@ vivin-paliathのコード(現在受け入れられている回答)を取得すると、次のようになります。
var done = false; //flag that tells us if we're done rendering
var page = require('webpage').create();
page.open('http://google.com', function (status) {
//If the page loaded successfully...
if(status === "success") {
//Render the page
page.render('google.png');
console.log("Site rendered...");
//Set the flag to true
done = true;
}
});
//Start polling every 100ms to see if we are done
var intervalId = setInterval(function() {
if(done) {
//If we are done, let's say so and exit.
console.log("Done.");
phantom.exit();
} else {
//If we're not done we're just going to say that we're polling
console.log("Polling...");
}
}, 100);
そして、デフォルトのユーザーとしてそれを実行すると、次のようになります。
docker run -i -t -v $(pwd):/pwd -w /pwd --rm wernight/phantomjs phantomjs google.js
Polling...
Polling...
Polling...
Polling...
Polling...
Polling...
Polling...
Polling...
Polling...
Polling...
Polling...
Polling...
Site rendered...
Done.
しかし、google.png
エラーはありません。-u root
dockerコマンドに追加するだけでこれが解決google.png
され、CWDで取得できます。
完全を期すために、最後のコマンドは次のとおりです。
docker run -u root -i -t -v $(pwd):/ pwd -w / pwd --rm wernight / phantomjs phantomjs google.js