Make

Makefile - 沒有這樣的文件或目錄錯誤

  • May 28, 2019

我正在嘗試創建一個 Makefile 目標,它首先檢查我的 Docker 容器是否存在。如果存在,那麼我想發出 Docker Container Restart 命令,否則我想發出 Docker Run 命令來創建和啟動容器。

我已經編寫了下面的程式碼,但收到了下面顯示的錯誤。結果 = 1 是正確的,因為我確實有一個容器正在執行。我已經移除了容器並測試了結果然後變為 0,這也是正確的。問題似乎出在我嘗試在ifeq語句中使用結果時。有人可以告訴我我做錯了什麼嗎?(我在調試時暫時註釋掉了 docker 命令並用 echo true / false 替換了它們)。

start_docker_myapp:
   result = $(shell (docker ps -a | grep myapp ) | wc -l )
   ifeq (${result}, 1)
       @echo 'true'
# docker restart ${IMAGE}
   else
       @echo 'false'
# docker run -v ${DIR}/var/log/docker:/var/log/myapp -p 1812:1812/udp  -p 1813:1813/udp --detach  --name ${IMAGE} $(REGISTRY)/$(IMAGE):$(TAG)
   endif

終端輸出

$ make start_docker_myapp
result =        1
make: result: No such file or directory
make: *** [start_docker_myapp] Error 1
$

您的 Makefile 存在許多問題(除了 Makefile 是否是合適的解決方案的問題):

  • 條件指令不是配方的一部分,因此它們不能以製表符開頭;
  • 讀取 Makefile 時會評估條件指令,因此必須預先分配變數並且不能是特定於目標的;
  • docker ps -a返回所有已知容器的資訊,包括非執行容器;
  • 虛假目標應該這樣聲明。

以下作品:

result = $(shell docker ps -f name=myapp -q | wc -l)
start_docker_myapp:
ifeq ($(strip $(result)),1)
   @echo true
else
   @echo false
endif

.PHONY: start_docker_myapp

引用自:https://unix.stackexchange.com/questions/521533