作業系統為OSx,我用Minikube(vm = virtual box)嘗試啟動一個Pod, yaml如下:
apiVersion: v1
kind: Pod
metadata:
name: tensorflow-runtime
labels:
app: tensorflow-runtime
spec:
containers:
- name: tensorflow-runtime
image: tensorflow/serving:latest
imagePullPolicy: IfNotPresent
command: ["/bin/sh"]
args: ["do.sh"]
volumeMounts:
- mountPath: /tmp/
name: work-space
volumes:
- name: work-space
hostPath:
path: /Users/...../
type: Directory
ps: 沒玩k8s的朋友我這邊說明一下,上面的東西基本上就是打開容器後要執行
掛載到VM目錄下的本機目錄的do.sh檔案,等價於:
sh do.sh
然後失敗了,log如下:
/bin/sh: 0: Can't open do.sh
因為小弟對Linux(minikube的執行環境)還有vm都不太熟,但聽聞unixlike的東西的權限管理好像挺複雜的,請問會不會是我哪裡沒有設定好呢QwQ~請各位大大賜教!
把do.sh的權限全部打開了,還是不行 Orz:
在mac上執行了 sudo chmod 777 do.sh
下列方法可行 : (實際上這是官方文件的解法,但我需要的是可執行腳本的概念)
apiVersion: v1
kind: Pod
metadata:
name: tensorflow-runtime
labels:
app: tensorflow-runtime
spec:
containers:
- name: tensorflow-runtime
image: tensorflow/serving:latest
imagePullPolicy: IfNotPresent
# 這邊改了哦
command: ["/bin/sh"]
args: ["-c", "cd ..; ls..; done"]
volumeMounts:
- mountPath: /tmp/
name: work-space
volumes:
- name: work-space
hostPath:
path: /Users/...../
type: Directory
do.sh用絕對路徑。
官方的例子組合起來是這樣:
/bin/sh -c "cd ..; ls..;"
shell script可以靠冒號去連接多行指令。
如果不想用絕對路徑的話,就得把do.sh丟到$PATH裡。
那個抱歉QQ 不管是用本機的絕對路徑,還是VM上的絕對路徑
他都告訴我/bin/sh: 0: Can't open do.sh
另外我發現 我在 vm 中 cd到 do.sh的資料夾(/tmp) 想要 ls 卻發現權限不允許www(ls cannot open directory '.', Operation not permitted)
那就是你虛擬系統裡www沒有存取權限。
另外do.sh也要加執行權限。