【问题标题】:Containerized Quarkus todo application fails to launch properly when deployed on AWS Fargate cluster容器化 Quarkus 待办事项应用程序在 AWS Fargate 集群上部署时无法正确启动
【发布时间】:2021-02-08 14:39:17
【问题描述】:

我已经在 GitHub 中提出了这个问题,请参阅 https://github.com/quarkusio/todo-demo-app/issues/16# 但在此处被指出。

我使用这个 Dockerfile 创建了一个 Docker 镜像,用于在 DEV 模式下运行 quarkus 待办事项列表应用程序(即使用 H2 数据存储):

FROM openjdk:8-jdk-alpine
LABEL xxx xxx xx@xx
USER root
RUN wget https://downloads.apache.org/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz -P /tmp 
RUN tar xf /tmp/apache-maven-3.6.3-bin.tar.gz -C /opt 
RUN ln -s /opt/apache-maven-3.6.3/bin/mvn /usr/bin/mvn 
RUN mkdir -p /usr/share/quarkus
COPY quarkus.tar.gz /usr/share/quarkus
RUN tar -xzf /usr/share/quarkus/quarkus.tar.gz -C /usr/share/quarkus
RUN rm -f /usr/share/quarkus/quarkus.tar.gz
EXPOSE 8080
CMD ["sh", "-c", "cd /usr/share/quarkus; mvn compile quarkus:dev"]

在我的 Windows docker 桌面上本地运行此映像时,应用程序运行良好。启动后控制台输出的最后几行如预期:

Hibernate: INSERT INTO todo(id, title, completed, ordering, url) VALUES (nextval('hibernate_sequence'), 'Visit Quarkus web site', false, 2, 'https://quarkus.io') Hibernate: INSERT INTO todo(id, title, completed, ordering, url) VALUES (nextval('hibernate_sequence'), 'Star Quarkus project', false, 3, 'https://github.com/quarkusio/quarkus/') 2020-10-24 11:58:57,417 INFO [io.quarkus] (main) Quarkus 0.15.0 started in 3.878s. Listening on: http://[::]:8080 2020-10-24 11:58:57,422 INFO [io.quarkus] (main) Installed features: [agroal, cdi, hibernate-orm, hibernate-validator, jdbc-h2, narayana-jta, resteasy, resteasy-jsonb]

但是,此映像在传输到 Amazon AWS ECR 并使用 ECS Fargate 集群部署时无法正常启动。当通过分配的公共 IP (http://54.86.53.85:8080/todo.html) 打开应用程序 URL 时,浏览器只显示一个没有内容的空白页面。尽管如此,应用程序的浏览器选项卡标题仍能正确显示。本例中启动后控制台输出的最后几行是:

INSERT INTO todo(id, title, completed, ordering, url) VALUES (nextval('hibernate_sequence'), 'Introduction to Quarkus', true, 0, null) 2020-10-24 12:11:03 Hibernate: Hibernate: 2020-10-24 12:11:03 2020-10-24 12:11:03 alter table Todo alter table Todo 2020-10-24 12:11:03 add constraint UK_oxfuur9jdyqshux5rm7g7ga6c unique (title) add constraint UK_oxfuur9jdyqshux5rm7g7ga6c unique (title) 2020-10-24 12:11:03 id bigint not null, id bigint not null, 2020-10-24 12:11:03 completed boolean not null, completed boolean not null, 2020-10-24 12:11:03 ordering integer, ordering integer, 2020-10-24 12:11:03 title varchar(255), title varchar(255), 2020-10-24 12:11:03 url varchar(255), url varchar(255), 2020-10-24 12:11:03 primary key (id) primary key (id) 2020-10-24 12:11:03 ) )

可以看出,本地运行映像的控制台输出末尾显示的消息Listening on: http://[::]:8080 在这里丢失了。

有人知道 AWS 案例中出了什么问题吗?

在 ECS Fargate 集群内创建的用于运行容器的 ECR 任务中,我显式启用了通过端口 8080 进行通信。是否必须对 quarkus 待办事项日志消息 Established TCP socket on 64572 和/或Listening for transport dt_socket at address: 5005?

我知道本机编译模式在这里可能更有意义;但我仍然是整个领域的新手,并将保留此作为未来的选择。

【问题讨论】:

    标签: quarkus


    【解决方案1】:

    我可以使用这个 Dockerfile 自己解决这个问题:

    FROM azul/zulu-openjdk-alpine:11
    LABEL xx xx xx@xxx
    USER root
    RUN mkdir -p /usr/share/quarkus
    COPY quarkus-target.tar.gz /usr/share/quarkus
    RUN tar -xzf /usr/share/quarkus/quarkus-target.tar.gz -C /usr/share/quarkus
    RUN rm -f /usr/share/quarkus/quarkus-target.tar.gz
    EXPOSE 8080
    CMD ["sh", "-c", "cd /usr/share/quarkus; java -jar target/todo-backend-1.0-SNAPSHOT-runner.jar"]
    

    这里quarkus-target.tar.gz是运行mvn package后目标目录的压缩包

    【讨论】:

      猜你喜欢
      • 2018-05-04
      • 2016-06-23
      • 2020-10-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-27
      • 2022-10-28
      • 2020-05-04
      • 2022-08-04
      相关资源
      最近更新 更多