0

这是我正在使用的 start.sh 脚本:

#!/bin/bash

touch app.log
HEAP_SIZE="-Xms1G -Xmx2G"
GC_ARGS="-XX:+UseG1GC -XX:+UseStringDeduplication -XX:+HeapDumpOnOutOfMemoryError"
ARGS="$HEAP_SIZE $GC_ARGS"
echo $ARGS
echo $PWD

nohup java $ARGS -jar app.jar > app.log 2>&1 &

chmod a+r app.log


和 Dockerfile

FROM adoptopenjdk/openjdk11:latest
WORKDIR /app/app-1
COPY ./ ./

CMD ["./start.sh"]

当我用 java -jar app.jar 替换 CMD 中的 start.sh 时,它会启动容器但 start.sh 它立即存在,我也没有看到任何错误,我检查 start.sh 具有执行权限,所以不能找出问题,有什么帮助吗?

进一步调试后发现问题出在shell脚本命令中,所以容器正在启动但它立即退出,但仍然不知道它发生在&的确切原因。

已更新 - 2020 年 4 月 29 日我可以通过删除 nohup 和 & (最后)来启动容器内的应用程序。但是,如果 stdout 和 stderr 被重定向 > app.log 2> &1",那么当我运行“docker run -it ...”时它不会显示日志,即它不会重定向日志 docker 容器的标准输出。

4

2 回答 2

1

尝试删除脚本中的 nohup。

于 2020-04-09T11:36:20.683 回答
0

将行替换#!/bin/bash#!/bin/sh。看起来,Docker Imageadoptopenjdk/openjdk11:latest带有/bin/sh而不是/bin/bash.

于 2021-12-10T22:52:29.017 回答