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-bot-java/blob/master/src/main/docker/Dockerfile.jvm .
我有一个像这样的简单端点。
@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-bot-java/blob/master/src/main/docker/Dockerfile.jvm .