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.
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
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
Meine Docker-Datei:
FROM golang:1.21 WORKDIR /app RUN go install github.com/cosmtrek/air@latest COPY . . RUN go mod tidy
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>
Jede Hilfe wäre sehr dankbar! !
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
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!