1.问题描述
root@hongpon316:~# docker ps
容器ID 图像命令创建状态端口名称
3d267f39cdb4 nginx_addpaths '/docker-entrypoint.' 5 小时前Up 4 小时0.0.0.0:3345-80/tcp,3345-80/tcp new_mynginx
862ead87f829 nginx:latest '/docker-entrypoint.' 19 小时前上升6 小时0.0.0.0:3340-80/tcp,3340-80/tcp mynginx_01
root@hongpon316:~# tree /data new_mynginx 的挂载目录结构
/数据
nginx
? 会议
? ? nginx.conf
? html
? 日志
? 访问.log
? 错误.log
nginx.conf
4个目录,4个文件
root@hongpon316:~#curl localhost:3345 出现403禁止错误
html
headtitle403 禁止/标题/头
身体
centerh1403 禁止/h1/center
hrcenternginx/1.21.5/center
/身体
/html
root@hongpon316:~#
2.查看错误日志并分析问题
问题原因分析
打开/data/nginx/log/error.log查看
推测可能是因为该文件夹下没有该文件。这是我如何安装它的回顾。
1、挂载前,不要挂载nginx.conf(因为会报错)。
3、可以自己修改nginx.conf,自定义配置项
root@hongpon316:/# docker ps 查看当前运行的容器
容器ID 图像命令创建状态端口名称
862ead87f829 nginx:latest '/docker-entrypoint.' 36 分钟前Up 36 分钟0.0.0.0:3340-80/tcp,3340-80/tcp mynginx_01 有一个正在运行的nginx 容器
root@hongpon316:/# docker exec -it mynginx_01 /bin/bash
root@862ead87f829:/#ls
bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var
启动docker-entrypoint.d 等lib media opt root sbin sys usr
root@862ead87f829:/# 其中nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@862ead87f829:/etc/nginx#ls
conf.d fastcgi_params mime.types 模块nginx.conf scgi_params uwsgi_params
root@862ead87f829:/etc/nginx# cat nginx.conf 查看nginx.conf的配置文件
root@862ead87f829:/#读取转义序列ctrl+p+q
成功复制2.56kB 到/data/
根@hongpon316:/#
4、创建官方使用的nginx容器
root@hongpon316:/# docker run -d --name new_mynginx -p 3345:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/log:/var/log/nginx -v /data/nginx/html:/usr/share/nginx/html nginx_addpaths 重新输入挂载命令(因为之前挂载没有成功,但是容器已经创建完成,所以需要使用docker ps -a 删除名为nginx_addpaths 的容器并重新输入此命令)
3d267f39cdb4bd55ca18adc0998c35bb55628baeb35b8e6279f6d6857be30f09
root@hongpon316:/# docker ps
容器ID 图像命令创建状态端口名称
3d267f39cdb4 nginx_addpaths '/docker-entrypoint.' 56 秒前最多56 秒0.0.0.0:3345-80/tcp,3345-80/tcp new_mynginx
862ead87f829 nginx:latest '/docker-entrypoint.' 13小时前18分钟0.0.0.0:3340-80/tcp,3340-80/tcp mynginx_01
root@hongpon316:/# docker inform -f '{{.Mounts}}' new_mynginx 查看容器new_mynginx 的挂载点
[{bind /data/nginx/conf/nginx.conf /etc/nginx/nginx.conf true rprivate} {bind /data/nginx/log /var/log/nginx true rprivate} {bind /data/nginx/html/usr/share/nginx/html true rprivate}]
根@hongpon316:/#
1.我使用docker cp mynginx_01:/etc/nginx/nginx.conf /data/来避免将'/data/nginx/conf/nginx.conf' 安装到rootfs 的'/etc/nginx/nginx.conf' 。因为容器不会通过挂载的方式将容器文件夹的内容复制到我主机对应的文件夹中。
2、同样,使用docker挂载容器内部的/usr/share/nginx/html文件夹时,主机(也就是我的服务器)上的/usr/local/nginx/html对应的文件夹是没有文件的。
因为docker挂载文件夹时,并没有将容器文件夹的内容复制到我主机对应的文件夹中。
3、进入容器时,在/usr/share/nginx/html文件夹下找不到index.html文件,可能是因为此时该文件夹已经挂载到了主机的/usr/local下。 /nginx/html,访问该文件夹相当于访问主机的/usr/local/nginx/html,因此缺少index.html文件,该文件是由default.conf中的indexindex.htmlindex.htm行指定的配置文件。访问文件时,找不到该文件,出现403禁止错误。
总结
使用docker -v挂载文件时,最好将容器中的所有文件都放在主机上。您无需担心容器服务启动时生成的文件。它将在主机上自动生成。
3、解决方案
3.1 回顾我的挂载命令
码头运行
-d
--名称new_mynginx
-p 3345:80
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /data/nginx/log:/var/log/nginx
-v /data/nginx/html:/usr/share/nginx/html
nginx_addpaths
3.2 参考说明
第一个-v:挂载nginx的主配置文件,方便直接在主机上修改容器的配置文件。
第二个-v:将nginx日志挂载到容器中。容器运行后,可以直接在宿主机的该目录下查看nginx日志。
第三个-v:挂载静态页面目录
-------------------------------------------------- -------------------------------------------------- --------------------------
创建nginx容器
docker run -d --name nginx -p 8880:80 nginx
创建挂目录
mkdir -p /data/nginx/{conf,log,html}
docker cp nginx:/etc/nginx/nginx.conf /data/nginx/conf/
docker cp nginx:/etc/nginx/conf.d /data/nginx/conf/
docker cp nginx:/usr/share/nginx/html /data/nginx/
-------------------------------------------------- -------------------------------------------------- -----------------------
停止刚刚创建的nginx 容器
docker 停止nginx
删除刚刚创建的容器
docker rm nginx
重新创建容器
docker run -d --name nginx -p 8880:80 \
-v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /data/nginx/log:/var/log/nginx \
-v /data/nginx/html:/usr/share/nginx/html \
--privileged=true nginx
-------------------------------------------------- -------------------------------------------------- --------------------------
挂载目录的结构
结果测试:
本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/4566.html
用户评论
Docker部署Nginx后出现403错误,真是让人头疼啊,折腾了好久才找到解决方法!
有19位网友表示赞同!
Nginx 403 Forbidden,这个错误太常见了,幸好有这篇文章,让我顺利解决!
有9位网友表示赞同!
Docker部署Nginx,403错误,原来是权限问题,真是涨姿势了!
有15位网友表示赞同!
Docker Nginx 403,看了这篇文章,终于明白了!
有16位网友表示赞同!
这篇文章真是太棒了,详细解释了Docker Nginx 403错误的原因和解决方案!
有7位网友表示赞同!
Docker Nginx 403问题,终于解决了,开心!
有8位网友表示赞同!
文章内容清晰易懂,对解决Docker Nginx 403错误非常有帮助!
有17位网友表示赞同!
感谢作者分享的解决方案,让我避免了踩坑!
有9位网友表示赞同!
Docker Nginx 403,原来是目录权限问题,真是简单粗暴!
有18位网友表示赞同!
Docker部署Nginx出现403,权限问题一定要注意!
有20位网友表示赞同!
Docker Nginx 403,这篇文章简直就是救星!
有12位网友表示赞同!
文章思路清晰,解决问题思路很明确!
有5位网友表示赞同!
Docker Nginx 403,下次遇到问题,我第一个想到的就是这篇文章!
有20位网友表示赞同!
这篇文章让我对Docker Nginx 403错误有了更深入的理解!
有15位网友表示赞同!
感谢作者的分享,让我少走很多弯路!
有14位网友表示赞同!
Docker Nginx 403问题,这篇文章总结得非常到位!
有10位网友表示赞同!
这篇文章真是太实用了,强烈推荐给遇到Docker Nginx 403问题的朋友!
有19位网友表示赞同!
终于找到解决Docker Nginx 403错误的方案了,太棒了!
有19位网友表示赞同!
Docker Nginx 403,希望这篇文章能帮助更多人!
有17位网友表示赞同!
Docker部署Nginx,遇到403错误不要慌,看看这篇文章就知道了!
有10位网友表示赞同!