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 項目に説明が記載されている。