Ollie
April 28, 2022, 7:00pm
#1
I need to run this Docker command in Kubernetes:
docker run -p 8080:8080 sagemath/sagemath sage -notebook
I can map everything across except "-notebook" - does anyone know how to do that?
Here is what I have so far, and of course it doesn't work since "-notebook" is not translated over to kubectl correctly:
kubectl run --image=sagemath/sagemath sage --port=8080 --type=LoadBalancer -notebook
Ray
April 28, 2022, 7:05pm
#2
When you define pod spec for your sage you can define both command
and an args
array, so for you it would be like
command: sage
args:
- -notebook
for launching with 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]
so try running with --
delimiter : kubectl run --image=sagemath/sagemath --port=8080 --type=LoadBalancer -- sage -notebook
--
does the trick. It means that kubectl wouldn't parse as kubectl arguments the following strings that start with -
So you run that container executing:
kubectl run --image=sagemath/sagemath --port=8080 sage -- -notebook
And if you want a public IP on GKE, you should expose the container executing:
kubectl expose deploy sage --type=LoadBalancer --port=8080
You can get the public IP running kubectl get service
in the row sage
at the column EXTERNAL-IP
command: sage notebook
args:
For such cases
k run --image=sagemath/sagemath --port=8080 --command=true -- sage notebook
--command=false
If true and extra arguments are present, use them as the 'command' field in the container, rather than the 'args' field which is the default.
-notebook
is not an argument to docker or kubectl, but to sage
.
Maxx
April 28, 2022, 7:23pm
#6
Yes - but how do I implement that in kubectl - that is the question. The docker command line above does work
The command you want to run goes at the end, just like before.