我需要在 Kubernetes 中运行这个 Docker 命令:
docker run -p 8080:8080 sagemath/sagemath sage -notebook
我可以映射除“-notebook”之外的所有内容 - 有人知道怎么做吗?
这是我目前所拥有的,当然它不起作用,因为“-notebook”没有正确翻译到 kubectl:
kubectl run --image=sagemath/sagemath sage --port=8080 --type=LoadBalancer -notebook
答案1
当你为你的 sage 定义 pod spec 时,你可以同时定义command
和一个args
数组,所以对你来说,它就像
command: sage
args:
- -notebook
用于启动kubectl run
Usage:
kubectl run NAME --image=image [--env="key=value"] [--port=port] [--replicas=replicas] [--dry-run=bool] [--overrides=inline-json] [--command] -- [COMMAND] [args...] [options]
因此尝试使用--
定界符运行:kubectl run --image=sagemath/sagemath --port=8080 --type=LoadBalancer -- sage -notebook
答案2
--
可以解决问题。这意味着 kubectl 不会将以下以 开头的字符串解析为 kubectl 参数-
因此,您运行该容器并执行:
kubectl run --image=sagemath/sagemath --port=8080 sage -- -notebook
如果您想要 GKE 上的公共 IP,则应该公开执行以下命令的容器:
kubectl expose deploy sage --type=LoadBalancer --port=8080
您可以在EXTERNAL-IP 列kubectl get service
中获取正在运行的公网 IPsage
答案3
command: sage notebook
args:
对于此类情况
k run --image=sagemath/sagemath --port=8080 --command=true -- sage notebook
--command=false 如果存在 true 和额外参数,则将它们用作容器中的“命令”字段,而不是默认的“args”字段。