Maison  >  Article  >  développement back-end  >  Docker : "fichier go.mod introuvable" alors qu'il existe manifestement

Docker : "fichier go.mod introuvable" alors qu'il existe manifestement

王林
王林avant
2024-02-09 15:30:10360parcourir

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

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.

Contenu de la question

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 ! !

Solution

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer