宝塔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退出容器。

赋予权限完毕,再次打开公网地址,成功运行。
相关文章:
宝塔Linux+docker部署nginx出现403 Forbidden
本文主要讲述了宝塔docker部署nginx出现403 Forbidden的原因,以及成功部署前端的方法步骤。 目录 1、问题描述2、问题检测2.1 检测监听端口是否异常2.2 检测Docker容器是否异常2.2.1 打开宝塔Linux的软件商店,找到Docker管理器,查看前端容器是…...
软件测试丨Redis 的数据同步策略以及数据一致性保证
Redis 以其键值存储的方式,为开发者提供了数据快速存取的能力。它不仅支持丰富的数据结构,如字符串、哈希、列表、集合等,而且提供了高效的数据同步与一致性保障机制。正因为如此,Redis 被广泛应用于缓存、消息队列、实时数据分析…...
C语言-运算符
1. 按位与运算符(&) 按位与运算符对两个整数的每一位执行“与”操作。只有当两个相应位都为 1 时,结果才为 1 ;否则为 0。 // 示例 int a 5; // 二进制: 0101 int b 3; // 二进制: 0011 int result a & b; …...
困境如雾路难寻,心若清明步自轻---2024年创作回顾
文章目录 前言博客创作回顾第一次被催更第一次获得证书周榜几篇博客互动最多的最满意的引发思考的 写博契机 碎碎念时也运也部分经验 尾 前言 今年三月份,我已写下一篇《近一年多个人总结》,当时还没开始写博客。四月份写博后,就顺手将那篇总…...
表格标签基本使用
表格主要用于显示、展示数据,因为它可以让数据显示的非常的规整,可读性非常好。特别是后台展示数据的时候,能够熟练运用表格就显得很重要。一个清爽简约的表格能够把繁杂的教据表现得很有条理。 1.<table></table>是用于定义表格…...
【学术会议论文投稿】深度解码:机器学习与深度学习的界限与交融
目录 一、定义与起源:历史长河中的两条轨迹 二、原理差异:从浅层到深层的跨越 三、代码解析:实战中的机器学习与深度学习 机器学习示例:线性回归 深度学习示例:卷积神经网络(CNN) 四、应用差异:各自领…...
使用printmap()函数来打印地图
使用PrintMap()函数可以将地图布局发送到打印机.默认情况下,任务会发送到地图文档保存的默认打印机,但也可以通过自定义一个特定的打印机来执行打印任务 操作方法 1.打开目标地图 2.打开python窗口 3.导入arcpy.mapping模块 import arcpy.mapping as mapping 4.引用活动地…...
MyBatis Plus 的 InnerInterceptor:更轻量级的 SQL 拦截器
在 Spring Boot 项目中使用 MyBatis Plus 时,你可能会遇到 InnerInterceptor 这个概念。 InnerInterceptor 是 MyBatis Plus 提供的一种轻量级 SQL 拦截器,它与传统的 MyBatis 拦截器(Interceptor)有所不同,具有更简单…...
Java复习第四天
一、代码题 1.相同的树 (1)题目 给你两棵二叉树的根节点p和q,编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。 示例 1: 输入:p[1,2,3],q[1,2,3] 输出:true示例 2: 输…...
docker 安装 mysql 详解
在平常的开发工作中,我们经常需要用到 mysql 数据库。那么在docker容器中,应该怎么安装mysql数据库呢。简单来说,第一步:拉取镜像;第二步:创建挂载目录并设置 my.conf;第三步:启动容…...
本地Ubuntu轻松部署高效性能监控平台SigNoz与远程使用教程
文章目录 前言1.关于SigNoz2.本地部署SigNoz3.SigNoz简单使用4. 安装内网穿透5.配置SigNoz公网地址6. 配置固定公网地址 前言 本文介绍如何在Ubuntu系统上使用 Docker 快速部署一款强大的应用性能监控工具SigNoz,并结合cpolar内网穿透工具轻松实现异地远程使用。 …...
防火墙的会话并发数、端口数量及其关系
防火墙的会话并发数、端口数量及其关系: 会话并发数:会话并发数,也称为并发连接数,是指防火墙能够同时处理的点对点连接的最大数目。这个参数直接影响到防火墙在高流量环境下的表现,特别是对于需要处理大量并发…...
随机变量的变量替换——归一化流和直方图规定化的数学基础
变量替换是一种在统计学和数学中广泛应用的技术,它通过定义新的变量来简化问题,使得原本复杂的随机变量变得更加容易分析。 变量替换的公式,用于将一个随机变量 X X X 的概率密度函数 f X f_X fX 转换为其经过函数 g g g 变换后的随机变…...
Java春招面试指南前言
在当今竞争激烈的就业市场中,对于即将踏入职场的Java开发者而言,春招是一次宝贵的机会。本博客专栏旨在为大家提供一份全面且实用的Java春招面试指南,助力大家顺利通过面试,开启职业生涯的新篇章。 无论你是初出茅庐的应届生&…...
【技术洞察】2024科技绘卷:浪潮、突破、未来
涌动与突破 2024年,科技的浪潮汹涌澎湃,人工智能、量子计算、脑机接口等前沿技术如同璀璨星辰,方便了大家的日常生活,也照亮了人类未来的道路。这一年,科技的突破与创新不断刷新着人们对未来的想象。那么回顾2024年的科…...
为AI聊天工具添加一个知识系统 之54 为事务处理 设计 基于DDD的一个 AI操作系统 来处理维度
本文要点 要点 Architecture程序 它被设计为一个双面神结构的控制器,它的两侧一侧编译执行另一侧 解释执行,自已则是一个 翻译器--通过提供两个不同取向之间 的 结构映射的显示器(带 图形用户接口GUI和命令行接口CLI 两种 接口)…...
【数据结构】二分查找
🚩 WRITE IN FRONT 🚩 🔎 介绍:"謓泽"正在路上朝着"攻城狮"方向"前进四" 🔎🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评…...
读书笔记《网络是怎样连接的》
目录 第一章1.1 生成http请求消息输入网址URL解析URLURL中省略文件名的情况http的基本思路生成HTTP请求消息发送请求后收到响应 1.2 向DNS服务器查询Web服务器的IP地址IP地址的基本知识域名和IP地址并用的理由Socket库提供查询IP地址的功能通过解析器向 DNS 服务器发出查询解析…...
Java 设计模式一
Java 设计模式是软件开发中的一类解决方案,旨在解决常见的设计问题,提升代码的可维护性、可复用性和扩展性。它们通常基于一些经验和最佳实践,提供了解决问题的标准化方法。以下是常见的 Java 设计模式及其概述: 1. 创建型模式 (…...
SOME/IP服务接口
本系列文章将分享我在学习 SOME/IP 过程中积累的一些感悟,并结合 SOME/IP 的理论知识进行讲解。主要内容是对相关知识的梳理,并结合实际代码展示 SOME/IP 的使用,旨在自我复习并与大家交流。文中引用了一些例图,但由于未能找到原作…...
六自由度工业机器人设计【说明书(论文)+CAD图纸+SolidWorks三维图+任务书+开题报告】
六自由度工业机器人作为现代自动化领域的核心装备,其设计需兼顾机械结构、运动控制与系统集成等多维度技术要求。该类机器人通过六个独立旋转轴的协同运动,可实现末端执行器在三维空间内的灵活定位与姿态调整,广泛应用于焊接、装配、搬运等工…...
Klipper固件深度剖析:从分布式架构到高级运动控制实战指南
Klipper固件深度剖析:从分布式架构到高级运动控制实战指南 【免费下载链接】klipper Klipper is a 3d-printer firmware 项目地址: https://gitcode.com/GitHub_Trending/kl/klipper Klipper是一款革命性的3D打印机固件,采用独特的分布式架构设计…...
lychee-rerank-mm环境部署:NVIDIA驱动470+、CUDA 12.x兼容性验证清单
lychee-rerank-mm环境部署:NVIDIA驱动470、CUDA 12.x兼容性验证清单 1. 项目概述与核心价值 lychee-rerank-mm是一个专为RTX 4090显卡优化的多模态重排序系统,基于Qwen2.5-VL架构和Lychee-rerank-mm模型构建。这个系统能够对批量图片与文本描述进行智能…...
利用快马平台快速生成ffmpeg视频裁剪与滤镜添加原型
最近在做一个短视频处理的小工具,需要快速验证ffmpeg的视频裁剪和滤镜功能。传统方式要自己搭建环境、查文档、写代码,整个过程特别耗时。后来发现用InsCode(快马)平台可以省去这些麻烦,直接输入需求就能生成可运行的原型代码,特别…...
Citra模拟器终极指南:免费畅玩3DS游戏的完整教程
Citra模拟器终极指南:免费畅玩3DS游戏的完整教程 【免费下载链接】citra A Nintendo 3DS Emulator 项目地址: https://gitcode.com/gh_mirrors/cit/citra 任天堂3DS模拟器Citra是一款开源的高性能游戏模拟工具,让PC用户能够流畅体验《精灵宝可梦》…...
突破暗黑2单机限制:d2s-editor存档修改工具全解析
突破暗黑2单机限制:d2s-editor存档修改工具全解析 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾在暗黑破坏神2的世界中,为了一件心仪的装备而反复刷怪数小时?是否因角色属性点分配失…...
Markdown 使用指南
这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…...
C++-string学习笔记
string学习笔记1、关键语法:1.1内联函数1.2静态成员常量1.3初始化列表1.4析构方式1.5operator1.5.1迭代器1.6strstr**1.6strcmp**string 头文件:#pragma once #include<iostream> #include<assert.h> #include<string.h> using namesp…...
面试:描述下bean的生命周期
1.实例化bean: 反射的方式生成对象 2.填充bean的属性: populateBean(),循环依赖的问题(三级缓存) 3.调用aware接口相关的方法: InvokeAwareMethod(完成BeanName,BeanFactory…...
Gemma-3 Pixel Studio快速上手:支持表格图像的结构化数据提取技巧
Gemma-3 Pixel Studio快速上手:支持表格图像的结构化数据提取技巧 1. 工具介绍与核心能力 Gemma-3 Pixel Studio是基于Google最新Gemma-3-12b-it模型构建的多模态对话终端,特别擅长处理包含表格的图像数据。与传统OCR工具不同,它不仅能识别…...
