追 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 ....




