Maison > développement back-end > Golang > le corps du texte

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

王林
Libérer: 2024-02-09 15:30:10
avant
394 Les gens l'ont consulté

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
Copier après la connexion

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
Copier après la connexion

Mon fichier docker :

FROM golang:1.21

WORKDIR /app

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

COPY . .
RUN go mod tidy
Copier après la connexion

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>
Copier après la connexion

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
Copier après la connexion

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!

source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!