質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

1回答

3486閲覧

docker cp が動きません。助けてください。

benkyouchuu

総合スコア26

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2016/10/25 16:41

現在、dockerを勉強中です。その中で、node.jsを使ったソースコードチェックツールを作っています。

どうしてもエラーで引っかかってしまい、なかなか前に進めず困っています。

Error response from daemon: lstat /var/lib/docker/aufs/mnt/8f92a5e8bdb2067a54835a8dae1fa4549900c6406330ad1e7627e7bbb14a3264/time.txt: no such file or directory child_process.js:526 throw err; ^ Error: Command failed: docker cp 4f03ce86b007:/time.txt /tmp/time.txt Error response from daemon: lstat /var/lib/docker/aufs/mnt/8f92a5e8bdb2067a54835a8dae1fa4549900c6406330ad1e7627e7bbb14a3264/time.txt: no such file or directory

動かすnode.jsで書いたapp.js

//モジュールの読み込み var express = require('express'); var app = express(); var bodyParser = require('body-parser'); var child_process = require('child_process'); var fs = require('fs'); //app.use()で使うミドルウェアを設定。 //ミドルウェアとは? //オペレーティングシステム(OS)とアプリケーションソフトの中間に位置し、様々なソフトウェアから共通して利用される機能を提供するもの //Expreeミドルウェアでは、HTTP要求や応答の前後に処理を追加することが可能。 //publicディレクトリをプラウザで利用する静的ファイルの起き場所として利用 //URLEncodeを行う。 app.use(express.static('public')); app.use(bodyParser.urlencoded({extended: false})); //API:POST app.post('/api/run',function(req,res){ var language = req.body.language; var source_code = req.body.source_code; var input = req.body.input; var filename, execCmd; if(language === 'ruby'){ filename = 'Main.rb'; execCmd = 'ruby Main.rb' }else if(language == 'python'){ filename = 'Main.py'; execCmd = 'ruby Main.py' } //コンテナ作成 //-iで標準入出力を有効。ネットワーク機能が不要。CPUは1CPUコアのみ。CPUコアの0番を利用。 //メモリも物理メモリも512MBスワップなし。プロセス数の制御。 var dockerCmd = 'docker create -i --net none --cpuset-cpus 0 --memory 512m --memory-swap 512m '+ '--ulimit nproc=10:10 --ulimit fsize=1000000 -w /workspace ubuntu-dev ' + '/usr/bin/time -q -f "%e" -o /time/txt timeout 3 su nobody -s /bin/bash -c "' + execCmd + '"'; console.log("Runing: "+ dockerCmd); var containerId = child_process.execSync(dockerCmd).toString().substr(0,12); console.log("ContainerId: "+ containerId) //コードをコンテナにコピーする child_process.execSync('rm -rf /tmp/workspace && mkdir /tmp/workspace && chmod 777 /tmp/workspace') fs.writeFileSync('/tmp/workspace/'+ filename, source_code); dockerCmd = "docker cp /tmp/workspace " + containerId + ":/"; console.log("Running: "+ dockerCmd); child_process.execSync(dockerCmd); //コンテナ開始 dockerCmd = "docker start -i " + containerId; console.log("Running: "+dockerCmd); var child = child_process.exec(dockerCmd,{},function(error,stdout,stderr){ //結果をコピーする dockerCmd = "docker cp "+containerId + ":/time.txt /tmp/time.txt"; console.log("Running: "+dockerCmd); child_process.execSync(dockerCmd); var time = fs.readFileSync("/tmp/time.txt").toString(); //コンテナから削除 dockerCmd = "docker rm "+ containerId; console.log("Running: "+dockerCmd); child_process.execSync(dockerCmd); console.log("Result: ",error,stdout,stderr); res.send({ stdout: stdout, stderr: stderr, exit_code: error && error.code || 0, time:time, }); }); child.stdin.write(input); child.stdin.end(); }); app.listen(3000,function(){ console.log('Listening on port 3000') });

どうしてか結果をコピーするところで意図していないファイルを見てしまいます。

もし分かる方いたら教えてください。
お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Bakudankun

2016/10/25 18:06

`var dockerCmd = `の定義のところ、`-o /time/txt`は`-o /time.txt`の間違いではないでしょうか?
benkyouchuu

2016/10/26 15:11

ありがとうございます。解決しました。
guest

回答1

0

自己解決

`-o /time.txt' に変更したら、解決しました!!

投稿2016/10/26 15:11

benkyouchuu

総合スコア26

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問