Docker是一種流行的容器化技術,但有時在建置映像檔時會遇到奇怪的問題。其中一個常見的問題是在建置過程中出現「go.mod 檔案未找到」的錯誤提示,儘管該檔案明顯存在。這個問題可能會讓人感到困惑,但實際上有幾個可能的原因和解決方法。在本文中,我們將探討這個問題,並為你提供一些解決方案。 php小編百草將幫助你理解並解決這個問題,讓你的Docker建置順利進行。
我正在嘗試製作一個使用 go 後端和 nextjs 前端(我尚未創建)的全端應用程式。我正在遵循製作後端的教程,到目前為止一切正常。但是,我想將後端內容移到自己的資料夾中,這樣我就可以將其和前端分開。現在,每當我運行docker compose build
時,它都會順利完成,但是當我運行docker compose up
時,這就是我得到的(我正在使用空氣來實現熱重載功能):
goapp-1 | watching . goapp-1 | watching backend goapp-1 | watching backend/cmd goapp-1 | watching backend/cmd/database goapp-1 | watching backend/cmd/handlers goapp-1 | watching backend/cmd/models goapp-1 | watching backend/tmp goapp-1 | !exclude tmp goapp-1 | building... goapp-1 | go: go.mod file not found in current directory or any parent directory; see 'go help modules' goapp-1 | failed to build, error: exit status 1
但是,當我進入 Docker 桌面並在該映像中運行 ls
時,它顯示 go.mod
就在那裡!
那問題出在哪裡呢?
我嘗試更改 compose.yaml
和我的 dockerfile 中的目標目錄和上下文,但都沒有成功。運行 go build
而不是 air
也會給我同樣的錯誤。
這是我的檔案樹:
databeis2 ┣ .vscode ┃ ┗ settings.json ┣ backend ┃ ┣ cmd ┃ ┃ ┣ ... ┃ ┃ ┣ main.go ┃ ┃ ┗ routes.go ┃ ┣ tmp ┃ ┃ ┣ build-errors.log ┃ ┃ ┗ main ┃ ┣ .air.toml ┃ ┣ Dockerfile ┃ ┣ go.mod ┃ ┣ go.sum ┃ ┗ pre_cmd.txt ┣ tmp ┃ ┗ build-errors.log ┣ .env ┗ compose.yaml
我的docker檔:
FROM golang:1.21 WORKDIR /app RUN go install github.com/cosmtrek/air@latest COPY . . RUN go mod tidy
和 compose.yaml:
<code>services: goapp: build: context: ./backend env_file: - .env ports: - 8000:8000 volumes: - .:/app command: air ./cmd/main.go -b 0.0.0.0 depends_on: - db db: image: postgres:alpine environment: - POSTGRES_USER=${DB_USER} - POSTGRES_PASSWORD=${DB_PASSWORD} - POSTGRES_DB=${DB_NAME} ports: - 5432:5432 volumes: - postgres-db:/var/lib/postgresql/data volumes: postgres-db: </code>
任何幫助將不勝感激! !
我解決了!問題是在複製 dockerfile 中的檔案後,我需要將 WORKDIR
更改為 backend
。
FROM golang:1.21 WORKDIR /app RUN go install github.com/cosmtrek/air@latest COPY . . # Add the below line WORKDIR /app/backend RUN go mod tidy
以上是Docker:'go.mod 檔案未找到”,當它明顯存在時的詳細內容。更多資訊請關注PHP中文網其他相關文章!