目錄
問題內容
解決方法
首頁 後端開發 Golang Docker容器中的伺服器(提供靜態reactjs檔案)404頁面找不到

Docker容器中的伺服器(提供靜態reactjs檔案)404頁面找不到

Feb 09, 2024 am 10:30 AM
排列

Docker容器中的伺服器(提供靜態reactjs檔案)404頁面找不到

php小編百草將為大家介紹如何解決在Docker容器中提供靜態ReactJS檔案時出現的404頁面未找到的問題。在使用Docker部署應用程式時,有時會遇到這個問題,但不用擔心,我們可以透過一些簡單的步驟來解決。在本文中,我將分享如何正確配置Docker容器以提供靜態ReactJS文件,以及如何避免404頁面未找到的錯誤。讓我們一起來看看吧!

問題內容

我正在嘗試容器化一個在連接埠 8000 上提供靜態檔案的 Go 應用程式。我查看了有關此主題的其他帖子,許多人似乎都說使用router.Run("0.0.0.0:8000")router .運行(“:8000”) 。我已經嘗試過兩者但仍然沒有成功。我的 main.go 看起來像這樣:

package main

// required packages
import (

    "fmt"
    "log"
    "os"

    "github.com/gin-gonic/gin"
    "github.com/gin-contrib/cors
    "net/http"
)

func main() {
    // start the server
    serveApplication()

}

func serveApplication() {
    corsConfig := cors.Config {
        AllowOrigins: []string{"*"},
        AllowMethods: []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
        AllowHeaders: []string{"Origin", "Content-Type", "Authorization"},
        AllowCredentials: true,
    }

    router := gin.Default()
    router.Use(cors.New(corsConfig))

    router.StaticFS("/static", http.Dir("./frontend/build/static"))
    router.StaticFile("/", "./frontend/build/index.html")
    router.Run(":8000")
    fmt.Println("Server running on port 8000")
}
登入後複製

以及以下 Dockerfile:

FROM node:16-alpine3.11 as build-node

WORKDIR /workdir
COPY frontend/ .
RUN yarn install
RUN yarn build

COPY .env /workdir/

FROM golang:1.21-rc-alpine3.18 as build-go
#FROM golang:1.17rc2-alpine3.14 as build-go

ENV GOPATH ""
RUN go env -w GOPROXY=direct
RUN apk add git

ADD go.mod go.sum ./
RUN go mod download
ADD . .
COPY --from=build-node /workdir/build ./frontend/build
RUN go build -o /main

FROM alpine:3.13
COPY --from=build-go /main /main
COPY --from=build-node /workdir/.env .env
EXPOSE 8000
ENTRYPOINT [ "/main" ]
登入後複製

我的資料夾結構如下所示;

portal
- frontend (here the react app is stored)
- backend (all my backend logic)
- Dockerfile
- main.go
- go.mod
登入後複製

當我使用 go run main.go 在本地運行它時,前端在連接埠 8000 上正確運行,並且載入 http://localhost:8000 工作正常。當我使用docker build -t Portal . 建立docker 映像,然後使用docker run -p 8000:8000 --name Portal Portal 運行它時,我可以在終端機中看到伺服器啟動並表示它正在連接埠8000 上運行,但我總是收到404 頁面未找到錯誤。

我嘗試使用router.Run("0.0.0.0:8000")router.run("localhost:8000")docker run --network host --name Portal Portal

我有什麼遺漏的嗎?我是否將前端建置複製到錯誤的位置?

解決方法

最終圖片中唯一的內容是您在最後FROM 行之後COPY 的內容;即main 二進位檔案和.env 檔案。您正在嘗試從 ./frontend/... 提供文件,但這不在最終圖像中。只要將相關的 COPY 行移到最後階段就可以了。

FROM alpine:3.13
COPY --from=build-go /main /main
COPY --from=build-node /workdir/.env .env
COPY --from=build-node /workdir/build ./frontend/build # <-- move from above
...
登入後複製

相反,由於您沒有使用 embed 套件來直接將建置的前端程式碼嵌入到二進位檔案中,因此在(Go)建置階段不需要它。

使用 embed 也可能有效,而不需要重新排列 Dockerfile。這看起來大致類似於

//go:embed frontend/build/*
var content embed.FS

router.StaticFS("/static", http.FS(fs.Sub(content, "frontend/build/static"))
router.StaticFileFS("/", "frontend/build/index.html", http.FS(content))
登入後複製

透過此設置,前端確實需要成為 Go 建置步驟的一部分,但現在它完全包含在二進位檔案中,不需要單獨複製到最終映像中。

以上是Docker容器中的伺服器(提供靜態reactjs檔案)404頁面找不到的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1321
25
PHP教程
1269
29
C# 教程
1249
24
Bootstrap圖片居中需要用到flexbox嗎 Bootstrap圖片居中需要用到flexbox嗎 Apr 07, 2025 am 09:06 AM

Bootstrap 圖片居中方法多樣,不一定要用 Flexbox。如果僅需水平居中,text-center 類即可;若需垂直或多元素居中,Flexbox 或 Grid 更合適。 Flexbox 兼容性較差且可能增加複雜度,Grid 則更強大且學習成本較高。選擇方法時應權衡利弊,並根據需求和偏好選擇最適合的方法。

十大虛擬幣交易平台2025 加密貨幣交易app排名前十 十大虛擬幣交易平台2025 加密貨幣交易app排名前十 Mar 17, 2025 pm 05:54 PM

十大虛擬幣交易平台2025:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

十大加密貨幣交易平台 幣圈交易平台app排行前十名推薦 十大加密貨幣交易平台 幣圈交易平台app排行前十名推薦 Mar 17, 2025 pm 06:03 PM

十大加密貨幣交易平台包括:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

c上標3下標5怎麼算 c上標3下標5算法教程 c上標3下標5怎麼算 c上標3下標5算法教程 Apr 03, 2025 pm 10:33 PM

C35 的計算本質上是組合數學,代表從 5 個元素中選擇 3 個的組合數,其計算公式為 C53 = 5! / (3! * 2!),可通過循環避免直接計算階乘以提高效率和避免溢出。另外,理解組合的本質和掌握高效的計算方法對於解決概率統計、密碼學、算法設計等領域的許多問題至關重要。

網頁批註如何實現Y軸位置的自適應佈局? 網頁批註如何實現Y軸位置的自適應佈局? Apr 04, 2025 pm 11:30 PM

網頁批註功能的Y軸位置自適應算法本文將探討如何實現類似Word文檔的批註功能,特別是如何處理批註之間的間�...

安全的虛擬幣軟件app推薦 十大數字貨幣交易app排行榜2025 安全的虛擬幣軟件app推薦 十大數字貨幣交易app排行榜2025 Mar 17, 2025 pm 05:48 PM

安全的虛擬幣軟件app推薦:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

wordpress文章列表怎麼調 wordpress文章列表怎麼調 Apr 20, 2025 am 10:48 AM

有四種方法可以調整 WordPress 文章列表:使用主題選項、使用插件(如 Post Types Order、WP Post List、Boxy Stuff)、使用代碼(在 functions.php 文件中添加設置)或直接修改 WordPress 數據庫。

安全靠譜的數字貨幣平台有哪些 安全靠譜的數字貨幣平台有哪些 Mar 17, 2025 pm 05:42 PM

安全靠譜的數字貨幣平台:1. OKX,2. Binance,3. Gate.io,4. Kraken,5. Huobi,6. Coinbase,7. KuCoin,8. Crypto.com,9. Bitfinex,10. Gemini。選擇平台時應考慮安全性、流動性、手續費、幣種選擇、用戶界面和客戶支持。

See all articles