首頁 > 後端開發 > Golang > 主體

Docker:'go.mod 檔案未找到”,當它明顯存在時

王林
發布: 2024-02-09 15:30:10
轉載
423 人瀏覽過

Docker:“go.mod 文件未找到”,当它明显存在时

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中文網其他相關文章!

來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板