Docker est une technologie de conteneurisation populaire, mais vous rencontrez parfois d'étranges problèmes lors de la création d'images. L'un des problèmes courants est un message d'erreur « fichier go.mod introuvable » pendant le processus de construction, même si le fichier existe évidemment. Ce problème peut prêter à confusion, mais il existe en réalité plusieurs causes et solutions possibles. Dans cet article, nous explorerons ce problème et vous proposerons quelques solutions. L'éditeur PHP Baicao vous aidera à comprendre et à résoudre ce problème afin que votre build Docker se déroule sans problème.
J'essaie de créer une application full stack en utilisant go backend et nextjs frontend (que je n'ai pas encore créé). Je suis le tutoriel pour créer le backend et jusqu'à présent, tout fonctionne bien. Cependant, je souhaite déplacer les éléments du backend dans son propre dossier afin de pouvoir les séparer du frontend. Maintenant, chaque fois que je cours docker compose build
时,它都会顺利完成,但是当我运行 docker compose up
voici ce que j'obtiens (j'utilise de l'air pour la fonctionnalité de rechargement à chaud) :
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
Mais quand je vais dans le bureau Docker et que j'exécute cette image ls
时,它显示 go.mod
la voilà !
Alors quel est le problème ?
J'ai essayé de changer compose.yaml
和我的 dockerfile 中的目标目录和上下文,但都没有成功。运行 go build
而不是 air
et cela m'a donné la même erreur.
Voici mon arborescence de fichiers :
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
Mon fichier docker :
FROM golang:1.21 WORKDIR /app RUN go install github.com/cosmtrek/air@latest COPY . . RUN go mod tidy
et 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>
Toute aide serait grandement appréciée ! !
Je l'ai résolu ! Le problème est qu'après avoir copié les fichiers dans le fichier docker, je dois le faire 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
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!