【问题标题】:Deploying a docker scratch container to CloudFoundry PaaS将 docker 临时容器部署到 CloudFoundry PaaS
【发布时间】:2020-04-23 13:23:00
【问题描述】:

我正在尝试将 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 是否需要映像内的外壳才能运行它?我找不到任何关于此的文档。

注意:我正在部署到 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"]

【问题讨论】:

  • 您的Dockerfile 是什么样的(尤其是CMDENTRYPOINT 指令)?本地运行镜像是否运行成功?
  • 我在问题中添加了 Dockerfile 的一部分。是的:如果我只是 docker run 图像,它会按预期启动 /service 二进制文件。
  • 谢谢。我很好奇你是否使用ENTRYPOINT 而不是CMD,你就是这样,所以我没有想法。希望有 CF 经验的人会路过。

标签: docker cloud-foundry paas


【解决方案1】:

是的,它需要 Docker 映像中的一些东西:

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

参考:https://docs.cloudfoundry.org/devguide/deploy-apps/push-docker.html#requirements

【讨论】:

  • 谢谢。不知道我是怎么错过那个页面的。
猜你喜欢
  • 2018-02-05
  • 2016-02-02
  • 2015-06-20
  • 2020-12-04
  • 2021-06-24
  • 1970-01-01
  • 1970-01-01
  • 2013-10-15
  • 2021-10-26
相关资源
最近更新 更多