2016-06-23 12 views
1

んが、私は、次のコマンドを実行しようとしています:の書き込みがエラーを与えない:そのようなファイルやディレクトリ

docker exec mydocker echo "hello" >> /usr/local/src/scores.txt 

しかし、それは私に次のエラー与える:

No such file or directory 

をしかし、

docker exec -it mydocker bash 

ファイルが実際に存在することを確認します。私がここで紛失しているものがありますか?

おかげ

答えて

3

は、コマンド文字列にechoコマンドをラップしてみてください。

docker exec mydocker sh -c 'echo "hello" >> /usr/local/src/scores.txt' 

は使用してファイルの内容を確認します。

docker exec mydocker cat /usr/local/src/scores.txt 
+0

このようなことをせずに他のコマンドを実行できることは面白いです。ありがとう – ahajib

+0

これには良い理由があります:それは2つのコマンドとして解釈されています。 – Nauraushaun

1

このための良い理由があります:それはあると解釈されています2つのコマンド。

docker exec mydocker sh -c 'echo "hello" >> /usr/local/src/scores.txt' 

しかし、なぜそれが起こっている:単一のシェルコマンドであなたのコンテナのコマンドをラップ - stacksonstacksが掲載され

ソリューションはありますか?

キーは、あなたがbash演算子を使用したことです。

echo one two >> file.txt 

「>>」演算子は、エコーの引数として渡された(「1」のようにして「2」を行う)を取得しません:あなたは何かを実行する任意の時間に似ています。代わりに、echoコマンドを実行し、出力をファイルに追加します。

この場合、 ">>"演算子はドッカーのexecに同じ処理を行い、結果を/usr/local/src/scores.txtに出力しようとしていて、ディレクトリが存在しないことを報告しますコンテナではなくホスト)。

docker exec mydocker echo "hello" >> scores.txt 

あなたは「hello」を含む、ホスト上scores.txtを見つけるだろう - コンテナ上で実行するコマンドの出力を:

これは、あなたが実行した場合ことを意味します。 そして最終テスト試みとして:

docker exec cf65263ed353 hostname && hostname 

あなたはそれがあなた自身に続いてコンテナのホスト名(そのハッシュID)を、印刷し表示されます。 2番目のコマンドはホスト上で実行されます。

関連する問題