项目背景
服务器环境是后端搭建的,我负责前端,但是小公司,那家伙跑路了。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