卡了我5个小时,却是简单的问题!Linux 下使用docker nginx镜像挂载web项目

项目背景

服务器环境是后端搭建的,我负责前端,但是小公司,那家伙跑路了。2023/12/27服务器突然宕机了,所以需要重启镜像,原来是后端那家伙搞,我只负责上传前端项目。

以下都是废话,请直接拉到底

开始操作

运行了docker run --name mynginx -d -p 80:80启动nginx容器 容器启动成功,但访问后一直是nginx的欢迎页。

这个时候问题来了

我很懵逼,nginx配置我根本就没有改动;我去查看了nginx.conf配置文件,发现配置的项目路径为/usr/local/share/nginx/html,而实际的项目路径为/docker/nginx/html;那我怎么搞,当然是把路径改了重启一下,然后发现根本没有用。

我又重新改了配置文件,重启后发现还是没用;然后我删了这个配置文件,发现完全没影响。给你你懵不懵?

这个时候就可以排除配置文件的问题了,我去问了各大搜索引擎和ChatGPT,这个配置文件在哪里,它们都说是在/etc/nginx/nginx.conf,然后我etc文件夹下根本就没有nginx这个文件夹,我能怎么办,我也很绝望。 我只能另辟蹊径,寻找这个配置文件在哪里,于是我运行了这个指令docker exec -it 容器ID或名称 find / -name nginx.conf;返回了这么一个结果/etc/nginx/nginx.conf

这个时候我猜想,这个镜像的配置文件应该是看不到,可以可以直接修改文件,于是有了这般操作

是的,完全没有用!!!

死马当活马医,尝试了下面的操作,诶别说,终于不是欢迎页了。

启动nginx镜像

txt 复制代码
docker run --name mynginx -d -p 80:80 --privileged=true -v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /docker/nginx/html:/etc/nginx/html -v /docker/nginx/log:/var/log/nginx nginx:latest

其实这个指令不是第一次用,之前的过程中也是尝试了的,应该是哪个配置不对导致的不成功。

以下是这条指令的解释,来源于ChatGPT

这条 docker run 命令用于在 Docker 中启动一个名为 mynginx 的 Nginx 容器。让我们逐个解释其中的参数和选项:

  • --name mynginx:为容器指定一个名称,即 mynginx。这样在后续的操作中,可以使用容器名称来引用这个容器。

  • -d:表示在后台运行容器(即以守护进程方式运行)。

  • -p 80:80:将主机的 80 端口映射到容器的 80 端口,这样可以通过主机的 80 端口访问 Nginx 服务。

  • --privileged=true:授予容器特权,这允许容器访问主机的设备和文件系统,这通常用于需要与主机进行更多交互的特殊情况。

  • -v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf:将主机上的 /docker/nginx/conf/nginx.conf 文件挂载到容器内的 /etc/nginx/nginx.conf 文件,这样可以在主机上编辑 Nginx 的配置文件,并且更改会立即生效在容器内。

  • -v /docker/nginx/html:/etc/nginx/html:将主机上的 /docker/nginx/html 目录挂载到容器内的 /etc/nginx/html 目录,这样可以将主机上的网站文件挂载到容器中,使 Nginx 可以直接访问这些文件。

  • -v /docker/nginx/log:/var/log/nginx:将主机上的 /docker/nginx/log 目录挂载到容器内的 /var/log/nginx 目录,这样可以将容器内的 Nginx 日志文件保存到主机上,方便日志的查看和管理。

  • nginx:latest:指定要启动的容器镜像为 Nginx 最新版本。

通过这条命令,我们创建了一个名为 mynginx 的 Nginx 容器,并且将配置文件、网站文件和日志文件从主机挂载到容器内,以便进行配置和数据的管理。

这次运行之后,页面报500,这个时候可以确认改nginx配置文件就行了 nginx的错误日志里是这么提示的

重新改配置

想了想刚才运行的指令是docker run --name mynginx -d -p 80:80 --privileged=true -v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /docker/nginx/html:/etc/nginx/html -v /docker/nginx/log:/var/log/nginx nginx:latest

指令里的项目路径是 /docker/nginx/html:/etc/nginx/html, 于是我将nginx配置的项目路径改为了/etc/nginx/html, 其实一开始这个路径是/usr/local/share/nginx/html,我先是改成了/docker/nginx/html,完全没有用。

于是乎,当项目路径改为/etc/nginx/html后,项目可以访问了,但这个时候访问接口报404,这个简单,先确认接口是否能正常访问,接口走8080端口,直接访问是可以跑通的,直接在nginx内配置一个重定向就可以了。

以上都是废话

就运行这个就行了

docker run --name 容器名称 -d -p 80:80 --privileged=true -v 项目配置的nginx配置文件路径/nginx.conf:容器使用的nginx配置的文件路径/nginx.conf -v 项目所在路径:容器指定的项目所在路径 -v 实际项目的错误日志路径:容器的错误日志路径 镜像名称

容器使用的nginx配置的文件路径可以使用这条指令获取 docker exec -it 容器名称 find / -name nginx.conf

相关推荐
秦jh_2 分钟前
【Linux】多线程(概念,控制)
linux·运维·前端
蜗牛快跑21315 分钟前
面向对象编程 vs 函数式编程
前端·函数式编程·面向对象编程
Dread_lxy16 分钟前
vue 依赖注入(Provide、Inject )和混入(mixins)
前端·javascript·vue.js
涔溪1 小时前
Ecmascript(ES)标准
前端·elasticsearch·ecmascript
榴莲千丞1 小时前
第8章利用CSS制作导航菜单
前端·css
奔跑草-1 小时前
【前端】深入浅出 - TypeScript 的详细讲解
前端·javascript·react.js·typescript
羡与1 小时前
echarts-gl 3D柱状图配置
前端·javascript·echarts
guokanglun1 小时前
CSS样式实现3D效果
前端·css·3d
Fanstay9851 小时前
在Linux中使用Nginx和Docker进行项目部署
linux·nginx·docker
咔咔库奇2 小时前
ES6进阶知识一
前端·ecmascript·es6