当前位置: 首页 > news >正文

宝塔Linux+docker部署nginx出现403 Forbidden

本文主要讲述了宝塔+docker部署nginx出现403 Forbidden的原因,以及成功部署前端的方法步骤。

目录

  • 1、问题描述
  • 2、问题检测
    • 2.1 检测监听端口是否异常
    • 2.2 检测Docker容器是否异常
      • 2.2.1 打开宝塔Linux的软件商店,找到Docker管理器,查看前端容器是否正常打开
      • 2.2.2 没有安装Docker管理器,可以在应用商店直接搜索安装
    • 2.3 检查nginx.conf配置
    • 2.4 检查Dockerfile配置
  • 3、解决方案
  • 4、测试修改是否成功
    • 4.1 将修改后的dockerfile文件替换掉宝塔中的dockerfile
    • 4.2 再次创建前端Docker容器
    • 4.3 小报错
      • 4.3.1 出现报错,说80端口已经被占用。
      • 4.3.2 发现问题是没有权限。

1、问题描述

最近使用宝塔Linux+docker部署了一个前端项目,但部署成功后发现打不开页面,显示403 Forbidden
在这里插入图片描述

2、问题检测

2.1 检测监听端口是否异常

我这里设置的监听端口是80,检查宝塔Linux的防火墙,防火墙显示端口正常
在这里插入图片描述

2.2 检测Docker容器是否异常

2.2.1 打开宝塔Linux的软件商店,找到Docker管理器,查看前端容器是否正常打开

在这里插入图片描述
这里显示容器的端口号和状态都是正常的
在这里插入图片描述

2.2.2 没有安装Docker管理器,可以在应用商店直接搜索安装

在这里插入图片描述

2.3 检查nginx.conf配置

这里是我的nginx.conf配置,经过问同学以及在网上找资料,得出结论nginx配置是没问题的

server {listen 80;# gzip configgzip on;gzip_min_length 1k;gzip_comp_level 9;gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;gzip_vary on;gzip_disable "MSIE [1-6]\.";root /usr/share/nginx/html;include /etc/nginx/mime.types;location / {try_files $uri /index.html;}
}

2.4 检查Dockerfile配置

经过最终检查,问题如下图所示。我设置的工作目录和copy的dist目录路径不一致。
工作目录我写的是user,而在copy的目录里我写的usr
在这里插入图片描述

3、解决方案

修改dockerfile文件,换成如下代码

FROM nginx# 解决容器时期与真实时间相差 8 小时的问题
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone# 复制代码到容器内
WORKDIR /usr/share/nginx/html/
USER rootCOPY ./docker/nginx.conf /etc/nginx/conf.d/default.confCOPY ./dist /usr/share/nginx/html/EXPOSE 80# 容器启动时运行 jar 包
CMD ["nginx", "-g", "daemon off;"]

4、测试修改是否成功

4.1 将修改后的dockerfile文件替换掉宝塔中的dockerfile

打开宝塔dockerfile所在目录,拖动修改过的本地dockerfile上传
在这里插入图片描述
在这里插入图片描述

4.2 再次创建前端Docker容器

由于我是使用的腾讯云的轻量应用服务器创建的宝塔Linux,因此这里直接在腾讯云里登录打开宝塔终端
在这里插入图片描述
输入 sudo -s进入root模式,防止待会出现权限问题

sudo -s

cd进入含有Dockerfile文件的目录下,输入以下代码构建新的容器

docker build -t xxxxx:0.0.1 .

将上述代码中的xxxxx替换成你的容器名,!!!注意:代码最后面有一个“ . ”,千万不能漏了。
在这里插入图片描述
在这里插入图片描述
容器构建完毕,输入docker run -p 80:80 -d xxxxxx运行刚才创建好的容器。命令中的-d作用是在后台运行该容器,删去-d则会在前台直接打开容器,这里推荐加上-d。

docker run -p 80:80 -d xxxxxx

注意使用时将上述代码中的xxxxx替换成你的容器名。

4.3 小报错

在这里插入图片描述

4.3.1 出现报错,说80端口已经被占用。

打开软件商店的Docker管理器,发现原来是上一个错误配置的容器还未停止。如图点击,直接停止该容器。
在这里插入图片描述
在这里插入图片描述
再次执行docker run -p 80:80 -d xxxxxx,启动容器。
输入 netstat -ntlp查看当前所有监听端口,输入docker ps查看当前目录启动的容器

netstat -ntlp
docker ps

在这里插入图片描述
发现运行还是失败了。仍然是403 Forbidden。在这里插入图片描述
打开宝塔Docker管理器,打开刚才运行的容器日志
在这里插入图片描述
在这里插入图片描述

4.3.2 发现问题是没有权限。

打开终端输入docker exec -i -t d0048aa75626 /bin/bash进入容器,在输入chmod -R 777 /usr/share/nginx/html赋予对应文件夹root权限。

docker exec -i -t d0048aa75626 /bin/bash
chmod -R 777 /usr/share/nginx/html

在这里插入图片描述
注意docker exec -i -t d0048aa75626 /bin/bash中的d0048aa75626 是容器id,这个可以通过在容器外输入命令docker ps查看,/usr/share/nginx/html这个是没有权限打开的文件的文件夹。如果已经在容器中,可以输入exit退出容器。
在这里插入图片描述
赋予权限完毕,再次打开公网地址,成功运行。

http://www.lryc.cn/news/525407.html

相关文章:

  • 软件测试丨Redis 的数据同步策略以及数据一致性保证
  • C语言-运算符
  • 困境如雾路难寻,心若清明步自轻---2024年创作回顾
  • 表格标签基本使用
  • 【学术会议论文投稿】深度解码:机器学习与深度学习的界限与交融
  • 使用printmap()函数来打印地图
  • MyBatis Plus 的 InnerInterceptor:更轻量级的 SQL 拦截器
  • Java复习第四天
  • docker 安装 mysql 详解
  • 本地Ubuntu轻松部署高效性能监控平台SigNoz与远程使用教程
  • 防火墙的会话并发数、端口数量及其关系‌
  • 随机变量的变量替换——归一化流和直方图规定化的数学基础
  • Java春招面试指南前言
  • 【技术洞察】2024科技绘卷:浪潮、突破、未来
  • 为AI聊天工具添加一个知识系统 之54 为事务处理 设计 基于DDD的一个 AI操作系统 来处理维度
  • 【数据结构】二分查找
  • 读书笔记《网络是怎样连接的》
  • Java 设计模式一
  • SOME/IP服务接口
  • Java 生成 PDF 文档 如此简单
  • 深入探究 YOLOv5:从优势到模型导出全方位解析
  • 【PoCL】运行 LLVM 中 pass 优化过程详解
  • 如何将使用unsloth微调的模型部署到ollama?
  • 【测试】UI自动化测试
  • SSM开发(二) MyBatis两种SQL配置方式及其对比
  • 【Redis】在ubuntu上安装Redis
  • JS-Web API -day06
  • JS-Web API -day03
  • 进程优先级
  • c语言(转义字符)