Развертывание скретч-контейнера docker в CloudFoun dry PaaS - PullRequest
1 голос
/ 23 апреля 2020

Я пытаюсь развернуть образ Docker как приложение Pivotal CloudFoun dry.

Мое изображение не содержит дистрибутив Linux, только один двоичный файл, который запускает мое веб-приложение. , Это вся ее файловая система:

drwxr-xr-x         0:0     502 kB  ├─⊕ etc
-rwxr-xr-x         0:0      25 MB  └── service

Когда я cf push переходит в CloudFoun dry, происходит сбой:

[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, как и ожидалось. Это должно просто запустить двоичный файл, без оболочки. ( edit: , хотя по какой-то причине там есть пробел, я не уверен, имеет ли это значение).

$ cf curl /v3/processes/$(cf app --guid my-service)
{
   "guid": "f334fc62-fc66-4d77-80bd-39a213ebbac2",
   "type": "web",
   "command": "/service ", <-- 
…

Я не знаю, где sh происходит от. Требуется ли CloudFoun dry оболочка внутри изображения для его запуска? Я не могу найти никаких документов по этому поводу.

ПРИМЕЧАНИЕ: Я развертываю в CloudFoun dry v2.6

$ cf curl /v2/info | jq -r .build
2.6.19-build.6

edit: часть ENTRYPOINT моего Dockerfile выглядит следующим образом:

# … earlier layers omitted

FROM scratch
COPY --from=build /etc/ssl               /etc/ssl
COPY --from=build /project/build/service /service
EXPOSE 8080
ENTRYPOINT ["/service"]

1 Ответ

0 голосов
/ 24 апреля 2020

Да, от вашего Docker образа требуется несколько вещей:

  1. Образ Docker должен содержать файл / etc / passwd с записью для пользователя root.
  2. Домашний каталог и оболочка для этого пользователя root должны присутствовать в файловой системе образа.
  3. Общий размер слоев файловой системы Docker изображения не должен превышать диск квота для приложения.

Ссылка: https://docs.cloudfoundry.org/devguide/deploy-apps/push-docker.html#requirements

...