gpt4 book ai didi

docker - 将Docker临时容器部署到CloudFoundry PaaS

转载 作者:行者123 更新时间:2023-12-02 19:50:01 26 4
gpt4 key购买 nike

我正在尝试将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镜像中的一些内容:

  • Docker镜像必须包含/ etc / passwd文件,其中包含root用户的条目。
  • 该根用户的主目录和 shell 程序必须存在于镜像文件系统中。
  • Docker镜像文件系统层的总大小不得超过应用程序的磁盘配额。

  • 引用: https://docs.cloudfoundry.org/devguide/deploy-apps/push-docker.html#requirements

    关于docker - 将Docker临时容器部署到CloudFoundry PaaS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61388320/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com