docker runでディレクトリにcdできないのはなぜですか?


39

特定のディレクトリからアプリケーションを実行する必要があります。

$ sudo docker run -P ubuntu/decomposer 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'
2014/10/09 21:30:03 exec: "cd /local/deploy/decomposer; ./decomposer-4-15-2014": stat cd /local/deploy/decomposer; ./decomposer-4-15-2014: no such file or directory

そのディレクトリは間違いなく存在します。bashをインタラクティブに実行してdockerに接続すると、上記のコマンドを実行できます。

$ sudo docker run -i -t ubuntu/decomposer /bin/bash
# cd /local/deploy/decomposer; ./decomposer-4-15-2014

完全なパスを指定してプログラムを実行できますが、現在のディレクトリから起動されると予想されるため、クラッシュします。私に何ができる?

回答:


34

次のように、コマンドを引数として/ bin / shに渡します。

sudo docker run -P ubuntu/decomposer /bin/sh -c 'cd /local/deploy/decomposer; ./decomposer-4-15-2014'

docker run centos / bin / sh -c 'cd / bin; / bin / ls 'は何も出力しませんが、docker run centos / bin / sh -c' / bin / ls / bin 'は動作します。
seanmcl 14年

実際には、両方のコマンドが/ binディレクトリ内のファイルのリストを出力します。両方試してみました。
グルーオン14年

私の箱ではありません、centos7。
seanmcl 14年

1
実際、実行するコマンドの前後の引用符を削除するだけでもうまくいきました。/bin/sh -cとにかく、Dockerはそれをラップすると思います。
schmmd 14年

85

-wオプションを使用して、作業ディレクトリを変更できます。

docker run

  -w, --workdir=""           Working directory inside the container

だから、あなたの場合、あなたは実行するでしょう:

sudo docker run -w /local/deploy/decomposer -P ubuntu/decomposer ./decomposer-4-15-2014

私は使用することができ-wdocker exec?コンテナでpythonスクリプトを実行する方法を探していますが、コンテナの外部で停止することはできません。
zx1986

ああ、私は答えを得た....flag provided but not defined: -w
zx1986

1
ちなみに、これがdocker runリファレンスページの一番下に隠れているのはなぜですか。:-)
アミールAbiri

5
これが受け入れ答えなければなりません
fferri

4

DockerfileでWORKDIRを使用して、作業ディレクトリを設定します。その後、EXECを使用してコマンドを実行できます。


0

これは、権限の問題が原因であるか、インスタンスが実行可能な使用可能なパスを見つけることができない可能性があります。これを確認するには、実行可能な場所をパスに追加して、スクリプトを実行してみてください

現在のディレクトリをパスに追加するには、以下のコマンドを使用してください

$ export PATH=$PATH:
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.