信创UOS,Docker 完整操作部署(Dockerfile部署方式)排错整合
文档说明整合全部会话内容Docker资源清理、Linux磁盘爆满处理、Java8Tomcat9Nginx1.26Redis7.4容器完整部署、Tomcat部署Vue排错、常用命令及日常维护。已修复所有语法错误如Dockerfile FROM指令、脚本命令笔误所有命令可直接复制运行无冗余、无冲突。基础镜像固定为debian:10解决源失效问题放弃ubuntu24.04适配与原有部署流程完全兼容。核心特性Tomcat conf目录映射宿主机直接修改配置、服务启停脚本自动化、容器开机自启、全路径无变量。/home/yhfx/RailwayEnvAna/java_project是测试服务器规定放置的路径可根据实际情况调整。JDK下载地址https://github.com/frekele/oracle-java/releases/download/8u101-b13/jdk-8u101-linux-x64.tar.gztomcat下载地址https://archive.apache.org/dist/tomcat/tomcat-9/v9.0.95/bin/apache-tomcat-9.0.95.tar.gznginx下载地址http://nginx.org/download/nginx-1.26.2.tar.gzredis下载地址https://download.redis.io/releases/redis-7.4.1.tar.gz一、Docker 镜像资源清理解决镜像冗余、磁盘占用1. 删除 悬空镜像# 交互式删除需确认dockerimage prune# 无需确认强制删除dockerimage prune-f# 精准删除指定ID的悬空镜像替换镜像ID即可dockerrmi be634fe64fb22. 彻底清理Docker所有无用资源释放大量磁盘空间dockersystem prune-a-f清理范围未使用镜像、停止的容器、无用网络、构建缓存、悬空镜像二、Linux 磁盘空间不足 / apt 报错解决针对apt安装依赖报错、磁盘爆满问题执行以下命令# 清理apt缓存释放缓存占用sudoaptclean# 清理系统日志限制日志大小为100Msudojournalctl --vacuum-size100M# 查看磁盘占用情况定位爆满目录df-h三、容器部署前置操作必执行避免冲突1. 清理旧环境旧容器、旧镜像部署前彻底删除历史容器和镜像避免配置冲突# 删除所有相关旧容器v1/v2/v3版本dockerrm-fjava8_tomcat9_nginx126_redis74_v1dockerrm-fjava8_tomcat9_nginx126_redis74_v2dockerrm-fjava8_tomcat9_nginx126_redis74_v3# 删除所有相关旧镜像v1/v2/v3版本dockerrmi-fjava8_tomcat9_nginx126_redis74:v1dockerrmi-fjava8_tomcat9_nginx126_redis74:v2dockerrmi-fjava8_tomcat9_nginx126_redis74:v3# 验证清理结果无相关镜像/容器即为成功dockerimagesdockerps-a2. 创建宿主机挂载目录并授权创建所有需要挂载的目录含Tomcat conf配置目录赋予777权限避免挂载失败# 创建基础目录及各组件挂载目录mkdir-p/home/yhfx/RailwayEnvAna/java_projectmkdir-p/home/yhfx/RailwayEnvAna/java_project/tomcat_folder/webappsmkdir-p/home/yhfx/RailwayEnvAna/java_project/tomcat_folder/logsmkdir-p/home/yhfx/RailwayEnvAna/java_project/tomcat_folder/logmkdir-p/home/yhfx/RailwayEnvAna/java_project/tomcat_folder/conf# Tomcat配置目录新增mkdir-p/home/yhfx/RailwayEnvAna/java_project/nginx_folder/confmkdir-p/home/yhfx/RailwayEnvAna/java_project/nginx_folder/logsmkdir-p/home/yhfx/RailwayEnvAna/java_project/redis_folder/confmkdir-p/home/yhfx/RailwayEnvAna/java_project/redis_folder/logsmkdir-p/home/uos/gongwu/yhfx# 赋予目录777权限避免挂载权限不足chmod-R777/home/yhfx/RailwayEnvAna/java_projectchmod-R777/home/uos/gongwu/yhfx四、创建服务启停统一脚本create_all_scripts.sh通过cat命令直接创建统一脚本执行后自动生成所有服务Redis/Nginx/Tomcat的启停小脚本无需手动逐个创建cd/home/yhfx/RailwayEnvAna/java_project# 外部创建统一脚本包含所有服务启停小脚本的创建命令catcreate_all_scripts.shEOF #!/bin/bash # 统一创建所有服务启停小脚本执行后自动生成所有所需sh脚本 cd / # 1. 创建Redis启停脚本已修正避免容器退出 cat start_redis.sh EOF1 #!/bin/bash # 启动Redis自动检查配置文件输出启动结果完整可执行 # 关键修复daemonize no禁止Redis后台运行防止容器退出 if [ ! -f /usr/local/redis/conf/redis.conf ]; then echo Redis配置文件不存在创建默认配置文件 echo daemonize no /usr/local/redis/conf/redis.conf echo logfile /var/log/redis/redis.log /usr/local/redis/conf/redis.conf echo dir /data /usr/local/redis/conf/redis.conf fi # 停止原有Redis进程避免多实例冲突 pkill redis-server # 启动Redis并指定配置文件前台运行 redis-server /usr/local/redis/conf/redis.conf sleep 1 # 验证启动结果 if pgrep redis-server /dev/null; then echo Redis启动成功 else echo Redis启动失败请查看日志cat /var/log/redis/redis.log fi EOF1catstop_redis.shEOF1 #!/bin/bash # 停止Redis输出停止结果失败可强制停止完整可执行 pkill redis-server sleep 1 if ! pgrep redis-server /dev/null; then echo Redis停止成功 else echo Redis停止失败强制停止pkill -9 redis-server pkill -9 redis-server fi EOF1catrestart_redis.shEOF1 #!/bin/bash # 重启Redis整合停止启动验证解决重启后仍未运行问题完整可执行 echo 正在重启Redis... pkill redis-server sleep 1 # 关键修复daemonize no禁止Redis后台运行防止容器退出 if [ ! -f /usr/local/redis/conf/redis.conf ]; then echo Redis配置文件不存在创建默认配置文件 echo daemonize no /usr/local/redis/conf/redis.conf echo logfile /var/log/redis/redis.log /usr/local/redis/conf/redis.conf echo dir /data /usr/local/redis/conf/redis.conf fi # 启动Redis前台运行 redis-server /usr/local/redis/conf/redis.conf sleep 1 # 验证重启结果 if pgrep redis-server /dev/null; then echo Redis重启成功 else echo Redis重启失败请查看日志cat /var/log/redis/redis.log fi EOF1# 2. 创建Nginx启停脚本catstart_nginx.shEOF1 #!/bin/bash # 启动Nginx带启动验证完整可执行 /usr/local/nginx126/sbin/nginx sleep 1 if pgrep nginx /dev/null; then echo Nginx启动成功 else echo Nginx启动失败请检查配置文件/usr/local/nginx126/conf/nginx.conf fi EOF1catstop_nginx.shEOF1 #!/bin/bash # 停止Nginx带停止验证失败可强制停止完整可执行 /usr/local/nginx126/sbin/nginx -s stop sleep 1 if ! pgrep nginx /dev/null; then echo Nginx停止成功 else echo Nginx停止失败强制停止 pkill -9 nginx fi EOF1catrestart_nginx.shEOF1 #!/bin/bash # 重启Nginx配置修改后生效带重启验证完整可执行 /usr/local/nginx126/sbin/nginx -s reload sleep 1 if pgrep nginx /dev/null; then echo Nginx重启成功 else echo Nginx重启失败尝试重新启动... /usr/local/nginx126/sbin/nginx fi EOF1# 3. 创建Tomcat启停脚本catstart_tomcat.shEOF1 #!/bin/bash # 启动Tomcat带启动验证完整可执行 pkill java sleep 1 /usr/local/tomcat9/bin/catalina.sh start sleep 2 if pgrep java /dev/null; then echo Tomcat启动成功 else echo Tomcat启动失败请查看日志/usr/local/tomcat9/logs/catalina.out fi EOF1catstop_tomcat.shEOF1 #!/bin/bash # 停止Tomcat带停止验证失败可强制停止完整可执行 pkill java sleep 1 if ! pgrep java /dev/null; then echo Tomcat停止成功 else echo Tomcat停止失败强制停止 pkill -9 java fi EOF1catrestart_tomcat.shEOF1 #!/bin/bash # 重启Tomcat带重启验证完整可执行 echo 正在重启Tomcat... pkill java sleep 1 /usr/local/tomcat9/bin/catalina.sh start sleep 2 if pgrep java /dev/null; then echo Tomcat重启成功 else echo Tomcat重启失败请查看日志/usr/local/tomcat9/logs/catalina.out fi EOF1# 4. 创建所有服务统一启停脚本catall_start.shEOF1 #!/bin/bash # 启动所有服务完整可执行带启动顺序控制 echo 开始启动所有服务... /start_redis.sh sleep 1 /start_nginx.sh sleep 1 # 取消调用/start_tomcat.sh避免与container_start.sh中前台启动重复 echo 所有服务启动完成可执行验证命令查看状态 EOF1catall_stop.shEOF1 #!/bin/bash # 停止所有服务完整可执行带停止顺序控制 echo 开始停止所有服务... /stop_tomcat.sh sleep 1 /stop_nginx.sh sleep 1 /stop_redis.sh echo 所有服务停止完成 EOF1catall_restart.shEOF1 #!/bin/bash # 重启所有服务完整可执行整合停止启动 echo 开始重启所有服务... /all_stop.sh sleep 2 /all_start.sh echo 所有服务重启完成 EOF1# 5. 创建容器启动脚本维持容器存活catcontainer_start.shEOF1 #!/bin/bash set -e # 启动所有服务 /all_start.sh # 前台运行Tomcat维持容器存活 exec /usr/local/tomcat9/bin/catalina.sh run EOF1# 给所有生成的脚本赋予可执行权限确保可直接运行chmodx ./*.shecho所有服务启停脚本创建完成EOF五、创建Dockerfiledebian:10无语法错误采用cat命令直接创建Dockerfile基础镜像为debian:10解决源失效已删除Nginx UTF-8配置集成所有组件安装逻辑cd/home/yhfx/RailwayEnvAna/java_projectcatDockerfileEOF FROM debian:10 # 配置软件源解决debian10源失效问题参考archive.debian.org官方源 RUN echo deb http://archive.debian.org/debian buster main contrib non-free /etc/apt/sources.list \ echo deb http://archive.debian.org/debian-security buster/updates main contrib non-free /etc/apt/sources.list \ echo Acquire::Check-Valid-Until false; /etc/apt/apt.conf.d/10no-check # 配置时区北京时间安装依赖、dmidecode工具及sudo命令 ENV TZAsia/Shanghai RUN apt-get update apt-get install -y tzdata \ gcc make libpcre3-dev zlib1g-dev tar curl procps net-tools iproute2 vim \ dmidecode sudo locales pkg-config \ # 确认时区配置避免时区偏差 ln -snf /usr/share/zoneinfo/$TZ /etc/localtime echo $TZ /etc/timezone # 创建Redis必需目录并授权避免启动报错 RUN mkdir -p /usr/local/redis/conf /var/log/redis /data chmod 777 /var/log/redis /data # 安装JDK8 COPY jdk-8u101-linux-x64.tar.gz /jdk.tar.gz RUN tar zxf /jdk.tar.gz -C /usr/local \ mv /usr/local/jdk1.8.0_101 /usr/local/jdk8 rm -f /jdk.tar.gz ENV JAVA_HOME/usr/local/jdk8 ENV PATH$JAVA_HOME/bin:$PATH # 安装Tomcat9 COPY apache-tomcat-9.0.95.tar.gz /tomcat.tar.gz RUN tar zxf /tomcat.tar.gz -C /usr/local \ mv /usr/local/apache-tomcat-9.0.95 /usr/local/tomcat9 rm -f /tomcat.tar.gz ENV CATALINA_HOME/usr/local/tomcat9 ENV PATH$CATALINA_HOME/bin:$PATH # 安装Nginx1.26.2已删除UTF-8配置行符合需求 COPY nginx-1.26.2.tar.gz /nginx.tar.gz RUN tar zxf /nginx.tar.gz cd nginx-1.26.2 \ ./configure --prefix/usr/local/nginx126 make -j4 make install cd .. rm -rf *nginx* # 安装Redis7.4.1 COPY redis-7.4.1.tar.gz /redis.tar.gz RUN tar zxf /redis.tar.gz cd redis-7.4.1 make -j4 make install cd .. rm -rf *redis* # 复制宿主机外部创建的统一脚本复制到容器内并执行自动生成所有小脚本 COPY create_all_scripts.sh /create_all_scripts.sh # 赋予统一脚本可执行权限并执行脚本生成所有服务启停小脚本 RUN chmod x /create_all_scripts.sh /create_all_scripts.sh # 给所有生成的小脚本赋予可执行权限双重保障确保可正常运行 RUN chmod x /*.sh # 容器启动命令执行启动脚本维持容器存活 CMD [/container_start.sh] EOF六、构建镜像复制配置文件1. 构建v3版本镜像cd/home/yhfx/RailwayEnvAna/java_projectdockerbuild-tjava8_tomcat9_nginx126_redis74:v3.构建成功后执行docker images可看到对应镜像若构建失败先执行docker rmi -f java8_tomcat9_nginx126_redis74:v3删除失败镜像再重新构建。2. 复制容器内默认配置到宿主机必执行创建复制脚本自动完成容器内配置文件复制、临时容器管理及目录授权cat/home/yhfx/RailwayEnvAna/java_project/copy_configs.shEOF #!/bin/bash cd /home/yhfx/RailwayEnvAna/java_project echo 开始复制容器内默认文件 # 启动临时容器后台运行60秒确保复制完成 docker run -d --rm --name temp_container java8_tomcat9_nginx126_redis74:v3 sleep 60 # 复制 Nginx 配置文件 docker cp temp_container:/usr/local/nginx126/conf/. nginx_folder/conf/ # 复制 Tomcat 配置、日志、项目目录含conf目录 docker cp temp_container:/usr/local/tomcat9/webapps/. tomcat_folder/webapps/ docker cp temp_container:/usr/local/tomcat9/logs/. tomcat_folder/logs/ docker cp temp_container:/usr/local/tomcat9/log/. tomcat_folder/log/ docker cp temp_container:/usr/local/tomcat9/conf/. tomcat_folder/conf/ # 复制Tomcat配置 # 复制 Redis 配置、日志目录 docker cp temp_container:/usr/local/redis/conf/. redis_folder/conf/ docker cp temp_container:/var/log/redis/. redis_folder/logs/ # 停止临时容器自动清理 docker stop temp_container # 授权含Tomcat conf目录避免挂载权限不足 chmod -R 777 /home/yhfx/RailwayEnvAna/java_project echo 全部复制完成 EOF执行复制命令bash/home/yhfx/RailwayEnvAna/java_project/copy_configs.sh七、容器启动状态验证1. 容器启动命令最终版无语法错误# 报错排查若出现「Unable to find image xxx:v3 locally」先重新构建镜像#cd /home/yhfx/RailwayEnvAna/java_project#docker build -t java8_tomcat9_nginx126_redis74:v3 .# 启动前删除同名容器避免冲突#docker rm -f java8_tomcat9_nginx126_redis74_v3# 启动容器开机自启、完整挂载含Tomcat conf映射dockerrun-d\--restartalways\--privileged\--namejava8_tomcat9_nginx126_redis74_v3\-p80:80\-p8080:8080\-p6379:6379\-v/etc/localtime:/etc/localtime\-v/dev/mem:/dev/mem\-v/home/yhfx/RailwayEnvAna/java_project/tomcat_folder/webapps:/usr/local/tomcat9/webapps\-v/home/yhfx/RailwayEnvAna/java_project/tomcat_folder/logs:/usr/local/tomcat9/logs\-v/home/yhfx/RailwayEnvAna/java_project/tomcat_folder/log:/usr/local/tomcat9/log\-v/home/yhfx/RailwayEnvAna/java_project/tomcat_folder/conf:/usr/local/tomcat9/conf\-v/home/yhfx/RailwayEnvAna/java_project/nginx_folder/conf:/usr/local/nginx126/conf\-v/home/yhfx/RailwayEnvAna/java_project/nginx_folder/logs:/usr/local/nginx126/logs\-v/home/yhfx/RailwayEnvAna/java_project/redis_folder/conf:/usr/local/redis/conf\-v/home/yhfx/RailwayEnvAna/java_project/redis_folder/logs:/var/log/redis\-v/home/uos/gongwu/yhfx:/home/uos/gongwu/yhfx\java8_tomcat9_nginx126_redis74:v32. 容器进入服务验证# 进入容器启动后等待5秒确保服务启动完成dockerexec-itjava8_tomcat9_nginx126_redis74_v3bash# 验证dmidecode、sudo及核心服务dmidecode# 验证工具可用sudo-l# 验证sudo可用debian10默认无密码回车即可# 验证Redis、Nginx、Tomcat运行状态echo-nRedis: pgrep redis-server/dev/nullecho✅ 运行||echo❌ 未运行echo-nNginx: pgrep nginx/dev/nullecho✅ 运行||echo❌ 未运行echo-nTomcat: pgrepjava/dev/nullecho✅ 运行||echo❌ 未运行# 服务未运行时快速启动容器内执行# 启动Redis/start_redis.sh# 启动Nginx/start_nginx.sh# 启动Tomcat/start_tomcat.sh# 一键启动所有服务/all_start.sh八、常见报错排错核心重点1. Tomcat 部署 Vue 报错MIME 类型异常报错信息Failed to load module script: Expected a JavaScript-or-Wasm module script but the server responded with a MIME type of 解决方案通过Tomcat conf映射修改无需进入容器# 1. 宿主机直接编辑Tomcat配置文件vim/home/yhfx/RailwayEnvAna/java_project/tomcat_folder/conf/web.xml# 2. 在 /web-app 之前添加以下MIME映射复制完整添加mime-mappingextensionjs/extensionmime-typeapplication/javascript/mime-type/mime-mappingmime-mappingextensioncss/extensionmime-typetext/css/mime-type/mime-mappingmime-mappingextensionhtml/extensionmime-typetext/html/mime-type/mime-mapping# 3. 重启容器生效dockerrestart java8_tomcat9_nginx126_redis74_v32. Dockerfile 报错FROM requires either one or three arguments报错原因FROM指令与注释同列导致语法解析失败解决方案确保FROM指令单独一行无多余注释本文档中Dockerfile已修复此问题。3. Redis 启动失败容器退出核心原因Redis配置中daemonizeyes后台运行导致容器退出解决方案本文档中Redis启停脚本已自动将daemonize设为no无需手动修改若仍失败查看日志排查# 查看Redis启动日志dockerexec-itjava8_tomcat9_nginx126_redis74_v3cat/var/log/redis/redis.log# 强制重启Redisdockerexec-itjava8_tomcat9_nginx126_redis74_v3 /restart_redis.sh九、常用命令汇总日常维护必备1. Docker 基础命令# 查看所有镜像dockerimages# 查看运行中的容器dockerps# 查看所有容器含停止的dockerps-a# 进入容器dockerexec-itjava8_tomcat9_nginx126_redis74_v3 /bin/bash# 停止容器dockerstop java8_tomcat9_nginx126_redis74_v3# 启动容器dockerstart java8_tomcat9_nginx126_redis74_v3# 重启容器dockerrestart java8_tomcat9_nginx126_redis74_v3# 删除容器dockerrm-fjava8_tomcat9_nginx126_redis74_v3# 删除镜像dockerrmi-fjava8_tomcat9_nginx126_redis74:v3# 查看容器实时日志dockerlogs-fjava8_tomcat9_nginx126_redis74_v32. 容器内服务维护命令# Redis维护/start_redis.sh# 启动/stop_redis.sh# 停止/restart_redis.sh# 重启# Nginx维护/start_nginx.sh# 启动/stop_nginx.sh# 停止/restart_nginx.sh# 重启nginx-sreload# 重载配置容器内# Tomcat维护/start_tomcat.sh# 启动/stop_tomcat.sh# 停止/restart_tomcat.sh# 重启# 统一维护/all_start.sh# 一键启动所有服务/all_stop.sh# 一键停止所有服务/all_restart.sh# 一键重启所有服务3. 宿主机常用维护命令# 查看端口占用80、8080、6379ss-tlnp|grep-E80|8080|6379# 宿主机直接重启Tomcat无需进入容器dockerexec-itjava8_tomcat9_nginx126_redis74_v3 /restart_tomcat.sh# 修改统一脚本后重新构建镜像cd/home/yhfx/RailwayEnvAna/java_projectdockerbuild-tjava8_tomcat9_nginx126_redis74:v3.十、注意事项所有命令均需在宿主机执行除容器内维护命令外且默认路径为/home/yhfx/RailwayEnvAna/java_project请勿随意修改路径。宿主机目录权限必须为777否则会出现挂载失败、日志无法写入等问题配置文件复制后会自动授权。配置文件复制步骤第六步必须在构建镜像后、启动容器前执行否则宿主机空目录会覆盖容器内默认配置。镜像和容器版本号统一为v3因Dockerfile有修改必须重新构建镜像否则配置不生效。修改宿主机映射目录下的配置文件Nginx/Redis/Tomcat conf后需重启对应服务或容器配置才能生效。容器开机自启依赖--restartalways参数服务器重启后容器会自动启动无需手动操作。已删除Nginx的UTF-8配置若出现Nginx中文乱码可手动在宿主机nginx_folder/conf/nginx.conf中添加配置。Tomcat conf目录映射后可直接在宿主机修改配置无需进入容器修改后重启Tomcat即可生效。