1. 首页 > 快讯

Docker(02) Docker部署Nginx后出现403禁止的解决方法

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

Docker(02) Docker部署Nginx后出现403禁止的解决方法

容器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

-------------------------------------------------- -------------------------------------------------- --------------------------

挂载目录的结构

结果测试:

用户评论

发型不乱一切好办

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位网友表示赞同!

单身i

感谢作者的分享,让我少走很多弯路!

    有14位网友表示赞同!

凉月流沐@

Docker Nginx 403问题,这篇文章总结得非常到位!

    有10位网友表示赞同!

还未走i

这篇文章真是太实用了,强烈推荐给遇到Docker Nginx 403问题的朋友!

    有19位网友表示赞同!

莫阑珊

终于找到解决Docker Nginx 403错误的方案了,太棒了!

    有19位网友表示赞同!

等量代换

Docker Nginx 403,希望这篇文章能帮助更多人!

    有17位网友表示赞同!

↘▂_倥絔

Docker部署Nginx,遇到403错误不要慌,看看这篇文章就知道了!

    有10位网友表示赞同!

本文采摘于网络,不代表本站立场,转载联系作者并注明出处:https://www.iotsj.com//kuaixun/4566.html

联系我们

在线咨询:点击这里给我发消息

微信号:666666