Использование micronaut на CloudRun полностью управляется - PullRequest
1 голос
/ 30 апреля 2019

Я попытался запустить инфраструктуру micronaut в Cloud Run для тестирования производительности при старте.

При развертывании в командной строке возникает следующая проблема:

Deploying...
  Creating Revision... Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable. Logs for this revision might contain more information....failed
Deployment failed
ERROR: (gcloud.beta.run.deploy) Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable. Logs for this revision might contain more information.

Тем не менее, я протестировал несколько конфигураций dockerfile, и я думаю, что мой последний подходит для передачи порта EnvVar ожидаемому Micronaut EnvVar:

FROM gradle:jdk11-slim as builder
COPY --chown=gradle:gradle . /home/gradle/src
WORKDIR /home/gradle/src
RUN gradle build

FROM adoptopenjdk/openjdk11-openj9:jdk-11.0.1.13-alpine-slim
COPY --from=builder /home/gradle/src/build/libs/micronaut-jib-cr*.jar micronaut-jib-cr.jar
ENV MICRONAUT_SERVER_PORT=${PORT}
EXPOSE ${PORT}
CMD java  -XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap -Dcom.sun.management.jmxremote -noverify ${JAVA_OPTS} -jar micronaut-jib-cr.jar

Итак, я углубился в журналы Cloud Run и увидел другую причину этой проблемы

D  Container Sandbox Limitation: Unsupported syscall setsockopt(0x8,0x1,0xc,0x2ae1273fc05c,0x4,0x32) 
D  Container Sandbox Limitation: Unsupported syscall setsockopt(0x8,0x6,0x6,0x2ae1273fc03c,0x4,0x3a) 
A  Error: Could not find or load main class micronaut.jib.cr.Application 
A  Caused by: java.lang.ClassNotFoundException: micronaut.jib.cr.Application 
D  Container Sandbox Limitation: Unsupported syscall semctl(0x1,0x0,0x2,0x2ae12753ef50,0x2,0x2ae12753ef50) 
D  Container Sandbox Limitation: Unsupported syscall semctl(0x1,0x0,0x2,0x2ae12753ef50,0x2,0x2ae12753ef50) 
D  Container Sandbox Limitation: Unsupported syscall semctl(0x1,0x0,0x2,0x2ae12753f440,0x2,0x2ae12753f440) 
D  Container Sandbox Limitation: Unsupported syscall semctl(0x1,0x0,0x2,0x2ae12753f440,0x2,0x2ae12753f440) 
D  Container Sandbox Limitation: Unsupported syscall semctl(0x1,0x0,0x2,0x2ae12753f440,0x2,0x2ae12753f440) 
D  Container Sandbox Limitation: Unsupported syscall semctl(0x1,0x0,0x2,0x2ae12753f440,0x2,0x2ae12753f440) 

Это действительно неправильное использование порта? В этом случае, можете ли вы помочь мне с моим докер-файлом?

Если нет, то это известное ограничение Cloud Run?

Есть ли обходной путь для микронавигации, чтобы решить это ограничение системного вызова?

Спасибо за вашу помощь

Ответы [ 2 ]

0 голосов
/ 04 мая 2019

Действительно, Джон Хэнли был прав. Моя сборка Gradle не ссылалась на правильный основной класс ... Мне стыдно за эту очевидную ошибку. Но я впервые использовал Visual Studio Code (потому что он кажется модным!), И рефакторинг пакета не так эффективен, как IntelliJ! (Или у меня нет нужного плагина!)

Спасибо за вашу помощь, теперь она отлично работает (и еще раз с упаковкой GraalVM!)

0 голосов
/ 01 мая 2019

Это не проблема порта. Похоже, вы установили ограничение gvisor , которое является песочницей, используемой Cloud Run. Ваш контейнер пытается сделать системный вызов, который песочница не поддерживает (пока), что приводит к сбою контейнера во время запуска.

...