本文主要講述了寶塔+docker部署nginx出現403 Forbidden的原因,以及成功部署前端的方法步驟。
目錄
- 1、問題描述
- 2、問題檢測
- 2.1 檢測監聽端口是否異常
- 2.2 檢測Docker容器是否異常
- 2.2.1 打開寶塔Linux的軟件商店,找到Docker管理器,查看前端容器是否正常打開
- 2.2.2 沒有安裝Docker管理器,可以在應用商店直接搜索安裝
- 2.3 檢查nginx.conf配置
- 2.4 檢查Dockerfile配置
- 3、解決方案
- 4、測試修改是否成功
- 4.1 將修改后的dockerfile文件替換掉寶塔中的dockerfile
- 4.2 再次創建前端Docker容器
- 4.3 小報錯
- 4.3.1 出現報錯,說80端口已經被占用。
- 4.3.2 發現問題是沒有權限。
1、問題描述
最近使用寶塔Linux+docker部署了一個前端項目,但部署成功后發現打不開頁面,顯示403 Forbidden
2、問題檢測
2.1 檢測監聽端口是否異常
我這里設置的監聽端口是80,檢查寶塔Linux的防火墻,防火墻顯示端口正常
2.2 檢測Docker容器是否異常
2.2.1 打開寶塔Linux的軟件商店,找到Docker管理器,查看前端容器是否正常打開
這里顯示容器的端口號和狀態都是正常的
2.2.2 沒有安裝Docker管理器,可以在應用商店直接搜索安裝
2.3 檢查nginx.conf配置
這里是我的nginx.conf配置,經過問同學以及在網上找資料,得出結論nginx配置是沒問題的
server {listen 80;# gzip configgzip on;gzip_min_length 1k;gzip_comp_level 9;gzip_types text/plain text/css text/javascript application/json application/javascript application/x-javascript application/xml;gzip_vary on;gzip_disable "MSIE [1-6]\.";root /usr/share/nginx/html;include /etc/nginx/mime.types;location / {try_files $uri /index.html;}
}
2.4 檢查Dockerfile配置
經過最終檢查,問題如下圖所示。我設置的工作目錄和copy的dist目錄路徑不一致。
工作目錄我寫的是user,而在copy的目錄里我寫的usr
3、解決方案
修改dockerfile文件,換成如下代碼
FROM nginx# 解決容器時期與真實時間相差 8 小時的問題
RUN ln -snf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo Asia/Shanghai > /etc/timezone# 復制代碼到容器內
WORKDIR /usr/share/nginx/html/
USER rootCOPY ./docker/nginx.conf /etc/nginx/conf.d/default.confCOPY ./dist /usr/share/nginx/html/EXPOSE 80# 容器啟動時運行 jar 包
CMD ["nginx", "-g", "daemon off;"]
4、測試修改是否成功
4.1 將修改后的dockerfile文件替換掉寶塔中的dockerfile
打開寶塔dockerfile所在目錄,拖動修改過的本地dockerfile上傳
4.2 再次創建前端Docker容器
由于我是使用的騰訊云的輕量應用服務器創建的寶塔Linux,因此這里直接在騰訊云里登錄打開寶塔終端
輸入 sudo -s
進入root模式,防止待會出現權限問題
sudo -s
cd進入含有Dockerfile文件的目錄下,輸入以下代碼構建新的容器
docker build -t xxxxx:0.0.1 .
將上述代碼中的xxxxx替換成你的容器名,!!!注意:代碼最后面有一個“ . ”,千萬不能漏了。
容器構建完畢,輸入docker run -p 80:80 -d xxxxxx
運行剛才創建好的容器。命令中的-d作用是在后臺運行該容器,刪去-d則會在前臺直接打開容器,這里推薦加上-d。
docker run -p 80:80 -d xxxxxx
注意使用時將上述代碼中的xxxxx替換成你的容器名。
4.3 小報錯
4.3.1 出現報錯,說80端口已經被占用。
打開軟件商店的Docker管理器,發現原來是上一個錯誤配置的容器還未停止。如圖點擊,直接停止該容器。
再次執行docker run -p 80:80 -d xxxxxx
,啟動容器。
輸入 netstat -ntlp查看當前所有監聽端口,輸入docker ps
查看當前目錄啟動的容器
netstat -ntlp
docker ps
發現運行還是失敗了。仍然是403 Forbidden。
打開寶塔Docker管理器,打開剛才運行的容器日志
4.3.2 發現問題是沒有權限。
打開終端輸入docker exec -i -t d0048aa75626 /bin/bash
進入容器,在輸入chmod -R 777 /usr/share/nginx/html
賦予對應文件夾root權限。
docker exec -i -t d0048aa75626 /bin/bash
chmod -R 777 /usr/share/nginx/html
注意docker exec -i -t d0048aa75626 /bin/bash
中的d0048aa75626 是容器id,這個可以通過在容器外輸入命令docker ps
查看,/usr/share/nginx/html
這個是沒有權限打開的文件的文件夾。如果已經在容器中,可以輸入exit
退出容器。
賦予權限完畢,再次打開公網地址,成功運行。