Rest api 端点在本地 运行 时有效,但在 docker 容器中无效。 (Quarkus/Jax-rs 轻松)

Rest api endpoint works when run locally, but not in docker container. (Quarkus/Jax-rs resteasy)

我有一个像这样的简单端点。

@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response registerPayment(Payment payment) throws Exception {

    try {
    DTUPayAccount customer = new DTUPayAccount();
    DTUPayAccount merchant = new DTUPayAccount();
    TransactionLog transaction;


    String customerId = tokenManagement.validateToken(payment.getToken());

    customer.setBankID(accountManagement.getDtuPayAccount(customerId).getBankID());

    merchant.setBankID(accountManagement.getDtuPayAccount(payment.getMerchantDtuPayID()).getBankID());

    bank.addPayment(customer.getBankID(), merchant.getBankID(), payment.getAmount(), "Added payment");

    transaction = new TransactionLog(
            customerId,
            payment.getMerchantDtuPayID(),
            payment.getToken(),
            payment.getAmount()
    );

    transactionLog.StoreTransaction(transaction);
    return Response.status(201).entity("The payment was succesful").build();

    } catch (Exception err) {
        return Response.status(400).entity(err.getMessage()).build();
    }
}

当我 运行 我的 api 在本地处于开发模式时,它正确 returns 一个 201 状态代码。但是,当我 运行 它在 docker 容器中并在我的请求正文中发送完全相同的数据时,我收到 500 内部服务器错误。

我的docker文件

FROM adoptopenjdk:11-jre-hotspot
WORKDIR /usr/src
COPY target/code-with-quarkus-1.0.0-SNAPSHOT-runner.jar /usr/src
CMD java -Xmx64m \
-jar code-with-quarkus-1.0.0-SNAPSHOT-runner.jar

现在我什至不知道从哪里开始寻找可能的原因,但有没有人知道在哪里寻找可能有意义?

runner jar 不是完整的应用程序。您还需要复制 lib/ 目录。

如果您使用我们的工具构建了您的应用程序,您应该在 src/main/docker 中有一个示例 Docker 文件。

您可以在此处找到模板:https://github.com/quarkusio/quarkus/blob/master/devtools/platform-descriptor-json/src/main/resources/templates/dockerfile-jvm.ftl .

这里有一个例子:https://github.com/quarkusio/quarkus-bot-java/blob/master/src/main/docker/Dockerfile.jvm .