赞
踩
目录
- docker search tomcat #docker hub搜索镜像
- docker pull tomcat #拉取镜像
- docker images #查看是否拉取成功
- [root@rockylinux ~]# docker run -d --name install_tomcat -p 8080:8080 tomcat
- 877e614c238979960a211196f368caa034cf9f5c6b4ac5c02b1470e442e45db1
- [root@rockylinux ~]# docker ps
- CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
- 877e614c2389 tomcat "catalina.sh run" 5 seconds ago Up 5 seconds 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp install_tomcat
- [root@rockylinux ~]# docker exec -it 877e614c2389 /bin/bash
- root@877e614c2389:/usr/local/tomcat#
把webapps.dist目录换成webapps
- root@877e614c2389:/usr/local/tomcat# ls -l
- total 132
- …………………………………………………………………………………………………………………………
- drwxr-xr-x. 2 root root 6 Dec 22 2021 webapps
- drwxr-xr-x. 7 root root 81 Dec 2 2021 webapps.dist
- drwxrwxrwx. 2 root root 6 Dec 2 2021 work
- root@877e614c2389:/usr/local/tomcat# rm -rf webapps
- root@877e614c2389:/usr/local/tomcat# mv webapps.dist webapps
将 webapps.dist 目录重命名为 webapps 的目的是恢复 Tomcat 的默认应用和配置,这些默认应用和配置通常包含一个管理界面或欢迎页面,能够确认 Tomcat 正常工作
- docker pull billygoo/tomcat8-jdk8
- docker run -d -p 8080:8080 --name mytomcat8 billygoo/tomcat8-jdk8
问题:docker run -d 之后docker ps 查看不掉运行的容器实列,直接退出
解决流程:直接 -it 进入容器手动运行服务脚本
root@4f06e97e71c8:/usr/local/tomcat# ./bin/catalina.sh run
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/lib/jvm/java-8-openjdk-amd64
Using CLASSPATH: /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
library initialization failed - unable to allocate file descriptor table - out of memoryAborted (core dumped)
root@4f06e97e71c8:/usr/local/tomcat#
问题的核心是 "library initialization failed - unable to allocate file descriptor table - out of memory"。这表明在尝试初始化库时,由于内存不足,无法分配文件描述符表。
宿主机查看内存充足 ,内存OK
free -m
如果内存不足,,可以手动给容器分配
docker run -d -p 8080:8080 --name mytomcat8 --memory="2g" billygoo/tomcat8-jdk8
查看系统文件描述符
[root@rockylinux ~]# ulimit -n
1024
当前的文件描述符限制为 1024,这对于运行 Tomcat 这样的应用程序可能不足。需要增加这个限制
宿主机配置:
- vim /etc/security/limits.conf
- * soft nofile 65536
- * hard nofile 65536
-
- vim /etc/sysctl.conf
- fs.file-max = 2097152
-
- sysctl -p 应用配置
-
- 重新登录系统或重启系统后,检查文件描述符限制是否已经生效:
- ulimit -n
文件描述符限制:
文件描述符是操作系统用来管理对文件、网络连接等资源的引用。每个进程都有一个文件描述符限制,即它可以同时打开的文件、网络连接等资源的数量
这些修改确保系统允许用户进程(包括 Docker 容器中的进程)打开足够多的文件描述符,以防止因为文件描述符数量不足而导致的服务中断或性能问题。Tomcat 服务器在处理大量连接时,可能需要大量文件描述符,因此增加这个限制是必要的
系统内核参数配置
Docker Daemon 配置
- vim /etc/docker/daemon.json
- {
- "default-ulimits": {
- "nofile": {
- "Name": "nofile",
- "Hard": 65536,
- "Soft": 65536
- }
- }
- }
-
- 重启docker daemon
- systemctl daemon-reload
- systemctl restart docker
注意:此处 " , ”不要忘掉,因为是json文件,我的完整配置如下:
Docker Daemon 配置
确保 Docker 容器在启动时继承适当的文件描述符限制,避免容器内应用因为文件描述符不足而发生错误。
为了确保系统和 Docker 容器内的应用程序能够稳定运行,建议同时进行以下调整:
上述操作做完之后,重新doker run即可
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。