Настройка PORT образов докеров в Cloudfoundry

Я попытался толкая Docker изображение из Eclipse theiaв cf, однако не может его запустить (или, скорее, подключиться к нему). Изображение предоставляет порт 3000 с EXPOSE 3000. Приложение работает, и при его локальном запуске открывается домашний экран theia по умолчанию.

На CF даны Достаточно диска и памяти. Когда по умолчанию port проверка работоспособности установлена, cf зависает при запуске приложения.

      Creating app theia-docker...
Mapping routes...

Staging app and tracing logs...
   Cell 15fcfa4a-a364-4dc2-ab6b-349f5196bd80 creating container for instance bd4b9e65-946f-485a-9de1-5c7fc8d4ad01
   Cell 15fcfa4a-a364-4dc2-ab6b-349f5196bd80 successfully created container for instance bd4b9e65-946f-485a-9de1-5c7fc8d4ad01
   Staging...
   Staging process started ...
   Staging process finished
   Exit status 0
   Staging Complete
   Cell 15fcfa4a-a364-4dc2-ab6b-349f5196bd80 stopping instance bd4b9e65-946f-485a-9de1-5c7fc8d4ad01
   Cell 15fcfa4a-a364-4dc2-ab6b-349f5196bd80 destroying container for instance bd4b9e65-946f-485a-9de1-5c7fc8d4ad01
   Cell 15fcfa4a-a364-4dc2-ab6b-349f5196bd80 successfully destroyed container for instance bd4b9e65-946f-485a-9de1-5c7fc8d4ad01

В конце концов доходит до FAILED

cf журналы покажут:

         2021-06-12T14:37:25.40+0530 [APP/PROC/WEB/0] OUT root INFO Deploy plugins list took: 161.7 ms
   2021-06-12T14:38:24.77+0530 [HEALTH/0] ERR Failed to make TCP connection to port 2375: connection refused; Failed to make TCP connection to port 2376: connection refused
   2021-06-12T14:38:24.77+0530 [CELL/0] ERR Failed after 1m0.303s: readiness health check never passed.

Почему он берет неправильный номер ПОРТА? Если я попытаюсь установить порт в переменной env как cf set-env PORT 3000, Я бы получил

      FAILED
Server error, status code: 400, error code: 100001, message: The app is invalid: environment_variables cannot set PORT

Затем я установил, что проверка работоспособности установлена ​​на process. Конечно, это начнется успешно (неудача или нет). Проверяя логи, можно увидеть, что приложение успешно запустилось. Когда я ssh в приложение ( cf ssh theia-docker) Я могу свернуть приложение как localhost: 3000 и вернуть HTML-код домашней страницы.

      ~ % cf ssh theia-docker
bash-5.0$ curl localhost:3000
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <meta name="apple-mobile-web-app-capable" content="yes">
  <script type="text/javascript" src="./bundle.js" charset="utf-8"></script>
</head>

<body>
  <div class="theia-preload"></div>
</body>

</html>bash-5.0$

Однако, когда я пытаюсь подключиться к приложению через URL-адрес приложения, я получаю сообщение об ошибке:

      502 Bad Gateway: Registered endpoint failed to handle the request.

Причина, по которой я это вижу, заключается в том, что базовое изображение, которое я использовал для этого, основано на docker:dind и похоже, что в базовом образе выставлены порты 2375 и 2376.

Почему CF выбирает порты, представленные в базовом образе, а не те, которые представлены в созданном образе докера? Разве порт в текущем образе не должен иметь приоритет?

1 ответ

Помогло изменение сопоставления маршрутов . Помогли следующие шаги: Получить руководство по приложению.

      ~ % cf app theia-docker  --guid
8032eea6-d146-4d27-9b17-c7331852b59b

Добавьте требуемый порт

      cf curl /v2/apps/8032eea6-d146-4d27-9b17-c7331852b59b -X PUT -d '{"ports": [3000]}'
{
   "metadata": {
      "guid": "8032eea6-d146-4d27-9b17-c7331852b59b",
      "url": "/v2/apps/8032eea6-d146-4d27-9b17-c7331852b59b",
      "created_at": "2021-06-12T09:04:51Z",
      "updated_at": "2021-06-12T17:58:03Z"
   },
   "entity": {
      "name": "theia-docker",
      "production": false,
.
.
.
"ports": [
         3000,
         2375,
         2376
      ],
.
.
.

Получите маршруты, прикрепленные к приложению

      ~ % cf curl /v2/apps/8032eea6-d146-4d27-9b17-c7331852b59b/routes
{
   "total_results": 1,
   "total_pages": 1,
   "prev_url": null,
   "next_url": null,
   "resources": [
      {
         "metadata": {
            "guid": "21f89763-baab-456d-8151-aad383a3c28f",
.
.
.

Используйте route-guid, чтобы найти route_mappings:

      cf curl /v2/routes/21f89763-baab-456d-8151-aad383a3c28f/route_mappings
{
   "total_results": 1,
   "total_pages": 1,
   "prev_url": null,
   "next_url": null,
   "resources": [
      {
         "metadata": {
            "guid": "33bde252-ad3e-49b4-91df-78543ac452b4",
            "url": "/v2/route_mappings/33bde252-ad3e-49b4-91df-78543ac452b4",
            "created_at": "2021-06-12T09:04:51Z",
            "updated_at": "2021-06-12T09:04:51Z"
         },
         "entity": {
            "app_port": null,
            "app_guid": "8032eea6-d146-4d27-9b17-c7331852b59b",
            "route_guid": "21f89763-baab-456d-8151-aad383a3c28f",
            "app_url": "/v2/apps/8032eea6-d146-4d27-9b17-c7331852b59b",
            "route_url": "/v2/routes/21f89763-baab-456d-8151-aad383a3c28f"
         }
      }
   ]
}

Обновите отображение маршрутов с помощью app_guid,route_guid и app_port:

      ~% cf curl /v2/route_mappings -X POST -d '{"app_guid":"8032eea6-d146-4d27-9b17-c7331852b59b","route_guid":"21f89763-baab-456d-8151-aad383a3c28f", "app_port":3000}'
{
   "metadata": {
      "guid": "a62a2ea6-859f-48cc-aa33-a8d6583081da",
      "url": "/v2/route_mappings/a62a2ea6-859f-48cc-aa33-a8d6583081da",
      "created_at": "2021-06-12T18:02:19Z",
      "updated_at": "2021-06-12T18:02:19Z"
   },
   "entity": {
      "app_port": 3000,
      "app_guid": "8032eea6-d146-4d27-9b17-c7331852b59b",
      "route_guid": "21f89763-baab-456d-8151-aad383a3c28f",
      "app_url": "/v2/apps/8032eea6-d146-4d27-9b17-c7331852b59b",
      "route_url": "/v2/routes/21f89763-baab-456d-8151-aad383a3c28f"
   }
}

Перечислите сопоставления маршрутов еще раз:

      ~ % cf curl /v2/routes/21f89763-baab-456d-8151-aad383a3c28f/route_mappings
{
   "total_results": 2,
   "total_pages": 1,
   "prev_url": null,
   "next_url": null,
   "resources": [
      {
         "metadata": {
            "guid": "33bde252-ad3e-49b4-91df-78543ac452b4",
            "url": "/v2/route_mappings/33bde252-ad3e-49b4-91df-78543ac452b4",
            "created_at": "2021-06-12T09:04:51Z",
            "updated_at": "2021-06-12T09:04:51Z"
         },
         "entity": {
            "app_port": null,
            "app_guid": "8032eea6-d146-4d27-9b17-c7331852b59b",
            "route_guid": "21f89763-baab-456d-8151-aad383a3c28f",
            "app_url": "/v2/apps/8032eea6-d146-4d27-9b17-c7331852b59b",
            "route_url": "/v2/routes/21f89763-baab-456d-8151-aad383a3c28f"
         }
      },
      {
         "metadata": {
            "guid": "a62a2ea6-859f-48cc-aa33-a8d6583081da",
            "url": "/v2/route_mappings/a62a2ea6-859f-48cc-aa33-a8d6583081da",
            "created_at": "2021-06-12T18:02:19Z",
            "updated_at": "2021-06-12T18:02:19Z"
         },
         "entity": {
            "app_port": 3000,
            "app_guid": "8032eea6-d146-4d27-9b17-c7331852b59b",
            "route_guid": "21f89763-baab-456d-8151-aad383a3c28f",
            "app_url": "/v2/apps/8032eea6-d146-4d27-9b17-c7331852b59b",
            "route_url": "/v2/routes/21f89763-baab-456d-8151-aad383a3c28f"
         }
      }
   ]
}

Вы найдете новое отображение маршрута, которое было создано. Удалите ненужный.

      ~ % cf curl /v2/route_mappings/33bde252-ad3e-49b4-91df-78543ac452b4 -X DELETE

Вот об этом. Приветствуются любые лучшие решения :). (Конечно, не требует поддержки Dockerfile базового образа)

Другие вопросы по тегам