313

このような複数のコマンドを実行しようとしています。

docker run image cd /path/to/somewhere && python a.py

しかし、これは次のように解釈されるため、「そのようなファイルまたはディレクトリはありません」というエラーが表示されます...

"docker run image cd /path/to/somewhere" && "python a.py"

"" や () などのエスケープ文字が必要なようです。

だから私も試しました

docker run image "cd /path/to/somewhere && python a.py"
docker run image (cd /path/to/somewhere && python a.py)

しかし、これらはうまくいきませんでした。

Docker Run Referenceを検索しましたが、ESCAPE 文字に関するヒントは見つかりませんでした。

4

9 に答える 9

12

次のように、Docker コンテナー内でコマンドをパイプすることもできますbash -c "<command1> | <command2>"

docker run img /bin/bash -c "ls -1 | wc -l"

ただし、リモートでシェルを呼び出さないと、出力はローカル端末にリダイレクトされます。

于 2017-01-05T16:31:27.157 に答える
10

bash -c実行しているコマンドが比較的単純な場合はうまく機能します。ただし、制御文字でいっぱいの長い一連のコマンドを実行しようとすると、複雑になる可能性があります。

外部からコマンドをプロセスにパイプすることで、これをうまく回避しました。

cat script.sh | docker run -i <image> /bin/bash

于 2020-04-20T10:56:57.980 に答える
2

docker-composeあなたと同じことをしようとしてここに来た他の人は、bash -c複数のコマンドを先頭に追加して引用符で囲み、&&.

したがって、OPの例ではdocker-compose run image bash -c "cd /path/to/somewhere && python a.py"

于 2019-01-04T07:10:41.460 に答える