![](/img/trans.png)
[英]Openshift PaaS/Kubernetes Docker Container Monitoring and Orchestration
[英]Deploying a docker scratch container to CloudFoundry PaaS
我正在尝试将 Docker 图像部署为 Pivotal CloudFoundry 应用程序。
我的图像不包含 Linux 发行版,只有一个运行我的 web 应用程序的二进制文件。 这是它的整个文件系统:
drwxr-xr-x 0:0 502 kB ├─⊕ etc
-rwxr-xr-x 0:0 25 MB └── service
当我将它cf push
送到 CloudFoundry 时,它崩溃了:
[API/1] OUT Process has crashed with type: "web"
[API/1] OUT App instance exited with guid f334fc62-fc66-4d77-80bd-39a213ebbac2 payload:
{"instance"=>"fabd4f14-902b-4970-51d0-845d", "index"=>0,
"cell_id"=>"67d596a0-891f-4969-b305-cbaeaa144481", "reason"=>"CRASHED",
"exit_description"=>"exec failed: container_linux.go:346: starting container process caused \"exec: \\\"sh\\\": executable file not found in $PATH\"",
"crash_count"=>3, "crash_timestamp"=>1587646358111493168,
"version"=>"c30771cb-38ab-4691-83fc-ec6996dc537f"}
该错误表明某些东西正在尝试运行sh
。
如果我检查崩溃的应用程序,它的启动命令是/service
,正如预期的那样。 这应该只运行二进制文件,没有 shell。(编辑:虽然由于某种原因那里有一个尾随空格,但我不确定它是否重要)。
$ cf curl /v3/processes/$(cf app --guid my-service)
{
"guid": "f334fc62-fc66-4d77-80bd-39a213ebbac2",
"type": "web",
"command": "/service ", <--
…
我不知道sh
来自哪里。 CloudFoundry 是否需要图像中的 shell 才能运行它? 我找不到任何关于此的文档。
注意:我正在部署到 CloudFoundry v2.6
$ cf curl /v2/info | jq -r .build
2.6.19-build.6
编辑:我的 Dockerfile 的 ENTRYPOINT 部分如下所示:
# … earlier layers omitted
FROM scratch
COPY --from=build /etc/ssl /etc/ssl
COPY --from=build /project/build/service /service
EXPOSE 8080
ENTRYPOINT ["/service"]
是的,它需要您的 Docker 图像中的一些东西:
参考: https://docs.cloudfoundry.org/devguide/deploy-apps/push-docker.html#requirements
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.