追 minikube 中的 log kubectl logs s3-provider-xxxx -p
時,看到錯誤訊息:
Defaulted container "s3fuse" out of: s3fuse, init-myservice (init) /bin/sh: /docker-entrypoint.sh: Permission denied
第一,是檢查 docker-entrypoint.sh
的權限。要讓 script 可以執行,在 COPY
進 image 以後記得調整權限:
RUN ["chmod", "+x", "/docker-entrypoint.sh"]
另外,再看了一下 entrypoint 寫什麼:
#!/bin/bash set -euo pipefail set -o errexit set -o errtrace ....
第一行這樣寫有點雷。
shebang 雖然可以讓 shell 可以了解需要使用哪一個直譯器來執行 script (可以參考之前 shebang 的介紹),但是每個系統的 bash 路徑並不一定相同。有些在 /bin/bash
,有些則在 /usr/bin/bash
,當然還有其他例外。
若不確定直譯器的路徑時,可以透過 env
這個指令來協助,這個工具在個系統上的絕對路徑都是 /usr/bin/env
,env
會從 runtime environment 偵測執行檔的路徑 (上面的範例是 bash),這樣一來 script 作者就不需要為每個環境來客製化設定。
用 env
來改寫 shebang
,結果如下:
#!/usr/bin/env bash set -euo pipefail set -o errexit set -o errtrace ....
「駭客軍團」好像被 Netflix 下架了 … 囧