Docker: „go.mod-Datei nicht gefunden', wenn sie offensichtlich existiert

王林
Freigeben: 2024-02-09 15:30:10
nach vorne
424 Leute haben es durchsucht

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

Docker ist eine beliebte Containerisierungstechnologie, aber manchmal stoßen Sie beim Erstellen von Images auf seltsame Probleme. Ein häufiges Problem ist die Fehlermeldung „go.mod-Datei nicht gefunden“ während des Build-Vorgangs, obwohl die Datei offensichtlich vorhanden ist. Dieses Problem kann verwirrend sein, aber es gibt tatsächlich mehrere mögliche Ursachen und Lösungen. In diesem Artikel werden wir dieses Problem untersuchen und Ihnen einige Lösungen anbieten. Der PHP-Editor Baicao hilft Ihnen, dieses Problem zu verstehen und zu lösen, damit Ihr Docker-Build reibungslos verläuft.

Frageninhalt

Ich versuche, eine Full-Stack-Anwendung mit dem Go-Backend und dem NextJS-Frontend (das ich noch nicht erstellt habe) zu erstellen. Ich folge dem Tutorial zur Erstellung des Backends und bisher funktioniert alles einwandfrei. Allerdings möchte ich die Backend-Inhalte in einen eigenen Ordner verschieben, damit ich sie vom Frontend trennen kann. Wenn ich jetzt renne docker compose build 时,它都会顺利完成,但是当我运行 docker compose up, bekomme ich Folgendes (ich verwende Luft für die Hot-Reload-Funktion):

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
Nach dem Login kopieren

Aber wenn ich in den Docker-Desktop gehe und dieses Image ausführe ls 时,它显示 go.mod, ist es da!

Was ist also das Problem?

Ich habe versucht, compose.yaml 和我的 dockerfile 中的目标目录和上下文,但都没有成功。运行 go build 而不是 air zu ändern, und es gab den gleichen Fehler.

Das ist mein Dateibaum:

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
Nach dem Login kopieren

Meine Docker-Datei:

FROM golang:1.21

WORKDIR /app

RUN go install github.com/cosmtrek/air@latest

COPY . .
RUN go mod tidy
Nach dem Login kopieren

und 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>
Nach dem Login kopieren

Jede Hilfe wäre sehr dankbar! !

Lösung

Ich habe es gelöst! Das Problem ist, dass ich nach dem Kopieren der Dateien in die Docker-Datei WORKDIR 更改为 backend muss.

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
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonDocker: „go.mod-Datei nicht gefunden', wenn sie offensichtlich existiert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage