如何使用容器入口点参数调用 gcloud 计算实例"创建容器"



我想基于带有python入口点的容器创建一个计算实例。入口点需要参数。例如,如果我使用以下命令在本地运行容器:

docker run ${IMAGE_TAG} 
--arg0=0 
--arg1=1

gcloud 命令是什么,创建一个使用提供的参数自动运行入口点的实例?

我尝试了类似以下内容(在推动容器后(但未成功。实例已启动,但未从入口点运行。

gcloud compute instances create-with-container 
${INSTANCE_NAME} 
--zone=${ZONE} 
--machine-type=${INSTANCE_TYPE} 
--accelerator=${GPU_TYPE} 
--service-account=default 
--container-image=${IMAGE_URI} 
--container-arg="--arg0=0" 
--container-arg="--arg1=1"

我会问,你的 ENTRYPOINT 是如何在你的 Dockerfile 中定义的。您使用的是exec还是外壳表单?

我认为您正在使用exec表单,因为在本地运行它时,您只需将两个参数附加到 docker run 命令,它们就会成功传递。我提到这一点,因为以shell形式定义ENTRYPOINT不接受根据文档传递的参数。

使用--container-arg传递的参数应附加到 ENTRYPOINT 之后,其方式与使用 CMD 设置ENTRYPOINT默认值时类似(有关更多详细信息,请参阅此处(。

正如 John Hanley所提到的,字符串--arg0=0将被传递给附加到 DockerfileENTRYPOINT的程序,或者传递给 John Hanley 的答案中用--container-command指定的命令。

我建议检查 Dockerfile 中如何定义入口点,以开始对可能导致此问题的原因进行故障排除。您还可以在创建后立即检查 VM 实例中正在运行的进程,以查看入口点是如何执行的,例如$ docker exec -it test ps aux.

通常,创建容器时会在 Dockerfile 中指定entrypoint

要覆盖此设置,请使用--container-command--container-arg参数。

将参数传递给容器入口点命令

Dockerfile中指定要运行的程序及其参数,如下所示:

CMD [ "python", "app.py", "arg1", arg2" ]

要覆盖这些设置,请执行以下操作:

gcloud compute instances create-with-container 
${INSTANCE_NAME} 
--zone=${ZONE} 
--machine-type=${INSTANCE_TYPE} 
--accelerator=${GPU_TYPE} 
--service-account=default 
--container-image=${IMAGE_URI} 
--containter-command="python"
--container-arg="app.py" 
--container-arg="arg1" 
--container-arg="arg2"

我不确定你想用--arg0=0完成什么.该字符串未更改将传递给程序。

最新更新