Makefileでdockerのイメージやコンテナをあれこれしたいという事情があって(これです)、その際に躓いたのでメモしておきます。
指定の名称のdocker コンテナがあるかどうかで処理を分ける、ということをしたかったので、以下のような感じでMakefileにターゲットを作成しました
test_container_exist:
if [ $(docker ps -qa -f name=${NAME}) ]; then \
echo container $(NAME) is exist. ; \
else \
echo contaier $(NAME) is not exist. ; \
fi
実際に動かしてみると、条件として設定してあるdockerコマンドの実行結果が空っぽになってしまい( if [ ]; then になっている )、コンテナの有無にかかわらず常にelseのほうが実行されてしまうのでした。
コマンドラインから上記のdocker コマンドを実行すると、ちゃんと指定の名称のコンテナIDが返ってくるのですが…
いろいろ調べていたところ、どうやらMakefileの中でコマンドを実行するには $(shell command)とする必要があるとわかりました。
test_container_exist:
# docker コマンドの前に、"shell" と付記する
if [ $(shell docker ps -qa -f name=${NAME}) ]; then \
echo container $(NAME) is exist. ; \
else \
echo contaier $(NAME) is not exist. ; \
fi
できましたできました。こんなことに小一時間もかけてしまった…?
RTFMな事案でした。ちゃんとドキュメントに目を通すようにしたいです。
あなたのお役に立てれば幸いです。
最近のコメント