Docker 02:Docker 部署 Nginx 後出現 403 禁止的解決方案

Mondo 科技 更新 2024-01-30

docker(02) docker 部署了 nginx,並出現了 403 forbidden 解決方案。

1.問題描述。

root@hongpon316:~# docker ps

container id image command created status ports names

3d267f39cdb4 nginx_addpaths "/docker-entrypoint.…" 5 hours ago up 4 hours 0.0.0.0:3345->80/tcp, :3345->80/tcp new_mynginx

862ead87f829 nginx:latest "/docker-entrypoint.…" 19 hours ago up 6 hours 0.0.0.0:3340->80/tcp, :3340->80/tcp mynginx_01

root@hongpon316:樹資料 New Mynginx 的掛載目錄結構。

data── nginx

conf nginx.conf

html log? access.log

error.log

nginx.conf

4 directories, 4 files

root@hongpon316:curl localhost:3345,出現 403 禁止錯誤。

nginx/1.21.5

root@hongpon316:~#

2. 檢視錯誤日誌並分析問題。

分析問題的原因。

Open Data Nginx 日誌錯誤日誌檢視。

大概可能是因為資料夾下沒有檔案。 這是對我如何安裝的評論。

1.不要掛載 nginx。 直到你掛載它conf(因為它會報告錯誤),2從不同的 nginx 容器複製 nginxconf out。

3.你可以修改nginxconf,自定義配置項。

root@hongpon316:docker ps 檢視當前正在執行的容器。

container id image command created status ports names

862ead87f829 nginx:latest "/docker-entrypoint.…" 36 minutes ago up 36 minutes 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

boot docker-entrypoint.d etc lib media opt root sbin sys usr

root@862ead87f829:/# whereis nginx

nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx

root@862ead87f829:/etc/nginx# ls

conf.d fastcgi_params mime.types modules nginx.conf scgi_params uwsgi_params

root@862ead87f829:/etc/nginx# cat nginx.conf 檢視 nginxconf 配置檔案。

root@862ead87f829:/# read escape sequence ctrl+p+q

root@hongpon316:/# docker cp mynginx_01:/etc/nginx/nginx.conf 資料從 mynginx 01 容器複製 nginx.conf out。

successfully copied 2.56kb to /data/

root@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

container id image command created status ports names

3d267f39cdb4 nginx_addpaths "/docker-entrypoint.…" 56 seconds ago up 56 seconds 0.0.0.0:3345->80/tcp, :3345->80/tcp new_mynginx

862ead87f829 nginx:latest "/docker-entrypoint.…" 13 hours ago up 18 minutes 0.0.0.0:3340->80/tcp, :3340->80/tcp mynginx_01

root@hongpon316:/# docker inspect -f "}"new mynginx 檢視容器 new mynginx 的掛載點。

root@hongpon316:/#

1.我正在使用 docker cp mynginx 01:等 nginx nginxconf 資料避免掛載"/data/nginx/conf/nginx.conf" to rootfs at "/etc/nginx/nginx.conf"。因為容器不會通過掛載複製到我主機的對應資料夾。

2.同理,當使用 docker 掛載容器內的 usr share nginx html 資料夾時,主機(即我的伺服器)的 usr 本地 nginx html 資料夾沒有任何檔案。

因為當 docker 掛載資料夾時,它不會將容器資料夾的內容複製到我主機的相應資料夾中。

3.而當你進入容器時,在usr share nginx html資料夾下找不到索引html檔案,可能是因為這個資料夾已經掛載到了主機的usr本地nginx html上,訪問這個資料夾就相當於訪問主機的usr本地nginx html,所以索引html 檔案,即預設conf 配置檔案html index.訪問 htm 行中指定的檔案時,找不到該檔案,並發生 403 禁止訪問錯誤。

總結。 使用 docker -v 掛載檔案時,最好將所有檔案放在主機上的容器中。 容器服務啟動時生成的檔案可以單獨保留,並在主機上自動生成。

第三,解決方案。

3.1 檢視我的掛載命令。

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

3.2 參考說明。

第乙個 -v:掛載 nginx 的主配置檔案,方便在主機上直接修改容器的配置檔案。

第二個 -v:將 nginx 日誌掛載到容器中,容器執行完畢後,可以直接檢視主機這個目錄下的 nginx 日誌。

第三個 -v:掛載乙個靜態頁面目錄。

3.3. 解決辦法:將容器內的檔案複製到主機。

建立 nginx 容器。

docker run -d --name nginx -p 8880:80 nginx

建立乙個掛起目錄。

mkdir -p /data/nginx/

複製 nginx 容器中的檔案。

1)nginx.將 conf 複製到主機,在 nginx 容器中新增 etc nginx nginx nginx.conf 檔案被複製到主機上的資料 nginx conf 目錄下。

docker cp nginx:/etc/nginx/nginx.conf /data/nginx/conf/

2) 替換 conf將 d 資料夾複製到主機,並在 nginx 容器中新增 etc nginx conf.d 目錄複製到主機上的資料 nginx conf 目錄。

docker cp nginx:/etc/nginx/conf.d /data/nginx/conf/

3)將html目錄複製到主機上,將nginx容器中的usr share nginx html目錄複製到主機上的data nginx目錄下。

docker cp nginx:/usr/share/nginx/html /data/nginx/

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 安裝免費開源的 Notion,結合 AFFINE 內網滲透,實現遠端訪問

    本文介紹如何使用Docker安裝AFFINE,並使用Cpolar內網透傳工具遠端訪問公網。AFFINE 是乙個全新的開源專案,旨在克服 Notion 和 Miro 的一些安全和私隱限制。它旨在幫助使用者將會議記錄 待辦事項 文件中的目標 會議白板上的頭腦風暴以及客戶訪談的反饋集中到乙個統一的平台中。...

    紡織品!全面管理Docker映象

    批量刪除圖片。檢視當前本地映象 docker 映象 列出當前所有本地映象的詳細資訊docker映象 a 列出當前本地映象的 iddocker 映象 aq 列出當前本地映象的結果字串 echo docker images aq 批量刪除本地映象 謹慎使用 docker rmi docker image...

    什麼是 docker 和 docker compose?這些是您必須了解的概念!

    在後面的軟體安裝中,我們將使用 docker 和 docker compose,為了幫助大家了解這兩個工具,本文將首先給出簡單的介紹。簡而言之,Docker 和 Docker Compose 是兩個工具,它們使我們能夠更輕鬆地在 Linux 環境中構建和執行應用程式。這裡我們以WordPress的安...

    Docker容器管理,趕快學習吧!

    建立容器。docker 執行映象的名稱,如果本地不存在映象,則會轉到映象。docker run 等於建立的 docker run 映像的名稱 已啟動 執行掛起的容器。這個方法會產生多個獨立的容器記錄,容器中沒有執行程式,所以docker run centos . 執行容器並進入容器,在容器中執行命令...

    在 docker 中部署 NPS Intranet 以滲透伺服器

    NPS 簡介。Project GitHub 主頁 nps NPS 是一種輕量級 高效能且功能強大的 Intranet 穿透 伺服器。目前支援TCP和UDP流量 以及任意TCP和UDP上層協議 訪問內網 本地支付介面除錯 SSH訪問 遠端桌面 內網DNS解析等 此外,它還支援內網http 內網sock...