No.368


【docker】ワイルドカードを含むコマンドの実行

アスタリスクをコマンドで使いたい

 そのままワイルドカードのコマンドを実行してエラーになる。dockerで誰もが一度は通る道だと思う。

$ docker exec -it コンテナ名 ls -alF /home/hoge/*
ls: cannot access '/home/hoge/*': No such file or directory

 どうもワイルドカードの展開はshellの機能なので実行できないようだ。

 同様にダブルコーテーションで囲って複数のコマンドを連結させたり、パイプを使ったりするのもshellの機能なのでうまく動かない。

$ docker exec -it コンテナ名 "ls -alF | grep fuga"
OCI runtime exec failed: exec failed: container_linux.go:348: starting container process caused "exec: \"ls -alF | grep fuga\": executable file not found in $PATH": unknown

 こういうときは、execでshellを実行してその中でコマンドを実行させればよい。要は-cオプションを使う。

$ docker exec -it コンテナ名 /bin/bash -c "ls -alF /home/hoge/*"
$ docker exec -it コンテナ名 /bin/bash -c "ls -alF | grep fuga"

 公式ページの Extended description 項目に説明が記載されている。

docker exec : Extended description