Я пытаюсь развернуть образ 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"]