无法使用shell脚本启动docker容器

无法使用shell脚本启动docker容器,docker,dockerfile,docker-java,Docker,Dockerfile,Docker Java,这是我正在使用的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&

这是我正在使用的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是否具有执行权限,因此无法找出问题所在,是否有帮助

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

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

尝试删除脚本中的nohup。

nohup在这里不是问题,删除&起作用,但还不确定原因。必须有一个活动进程来保持容器的活动,因为nohup和&最后java进程将进入后台。因此docker不知道哪个是活动进程,并假设容器已完成其任务并退出。