这是我正在使用的 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 容器的标准输出。