服务器内存升级导致的Docker容器启动失败解决方案

场景: 服务器从8G内存升级到16G。重启机器后,Docker正常,但是镜像启动全部失败,而且没有错误日志。

原因: 升级之前每个Tomcat镜像分配的容器内存是 1000M, Tomcat中的 catalina.sh 是没有配置的。

docker run -d -m 1000M --name tomcat ...

升级内存到16G之后,Tomcat启动时申请的内存,在8G 和 16G 两种情况下是不一样的。导致原来对容器限制在 1000M的情况下,Tomcat无法申请最低运行内存(具体细节没有深入研究)

解决: 修改 Tomcat的 catalina.sh文件,(根据需要修改相关参数)添加

cygwin=false
JAVA_OPTS="-server -Xms1024m -Xmx2048m -XX:MaxNewSize=256m -XX:PermSize=128m -XX:MaxPermSize=256m"

如何挂载Tomcat目录

  • 先创建非挂载镜像
docker run -d --name tomcat tomcat:latest
  • 拷贝
docker cp tomcat:/usr/local/tomcat/conf /mnt/home/udocker/tomcat
docker cp tomcat:/usr/local/tomcat/webapps /mnt/home/udocker/tomcat
docker cp tomcat:/usr/local/tomcat/logs /mnt/home/udocker/tomcat
docker cp tomcat:/usr/local/tomcat/bin/catalina.sh /mnt/home/udocker/tomcat/catalina.sh
  • 运行
docker run -d -m 1000M -p 9002:9002 --name tomcat_9002 --network testnet --network-alias tomcat_9002 \
-e JAVA_OPTS="-Duser.timezone=Asia/Shanghai -Djava.security.egd=file:/dev/./urandom" \
-v /etc/localtime:/etc/localtime:ro \
-v /mnt/home/udocker/tomcat_9002/conf:/usr/local/tomcat/conf \
-v /mnt/home/udocker/tomcat_9002/bin/catalina.sh:/usr/local/tomcat/bin/catalina.sh \
-v /mnt/home/udocker/tomcat_9002/logs:/usr/local/tomcat/logs \
-v /mnt/home/udocker/tomcat_9002/webapps:/usr/local/tomcat/webapps \
tomcat:latest

你可能感兴趣的:(Docker)