Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Docker: "fail go.mod tidak ditemui" apabila ia jelas wujud

Docker: "fail go.mod tidak ditemui" apabila ia jelas wujud

王林
王林ke hadapan
2024-02-09 15:30:10416semak imbas

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

Docker ialah teknologi kontena yang popular, tetapi kadangkala anda menghadapi masalah pelik semasa membina imej. Salah satu masalah biasa ialah mesej ralat "go.mod file not found" semasa proses binaan, walaupun fail itu jelas wujud. Isu ini boleh mengelirukan, tetapi sebenarnya terdapat beberapa sebab dan penyelesaian yang mungkin. Dalam artikel ini, kami akan meneroka masalah ini dan memberi anda beberapa penyelesaian. Editor PHP Baicao akan membantu anda memahami dan menyelesaikan masalah ini supaya binaan Docker anda berjalan dengan lancar.

Kandungan soalan

Saya cuba membuat aplikasi tindanan penuh menggunakan go backend dan nextjs frontend (yang saya belum buat lagi). Saya mengikuti tutorial untuk membuat bahagian belakang dan setakat ini semuanya berfungsi dengan baik. Walau bagaimanapun, saya ingin mengalihkan bahan bahagian belakang ke dalam foldernya sendiri supaya saya boleh menyimpannya berasingan daripada bahagian hadapan. Sekarang apabila saya berlari docker compose build 时,它都会顺利完成,但是当我运行 docker compose up inilah yang saya dapat (saya menggunakan udara untuk fungsi tambah nilai panas):

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

Tetapi apabila saya pergi ke desktop Docker dan menjalankan dalam imej itu ls 时,它显示 go.mod itulah ia!

Jadi apa masalahnya?

Saya cuba menukar compose.yaml 和我的 dockerfile 中的目标目录和上下文,但都没有成功。运行 go build 而不是 air dan ia memberi saya ralat yang sama.

Ini adalah pokok fail saya:

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

Fail buruh pelabuhan saya:

FROM golang:1.21

WORKDIR /app

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

COPY . .
RUN go mod tidy

dan mengarang.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>

Sebarang bantuan akan sangat dihargai! !

Penyelesaian

Saya menyelesaikannya! Masalahnya ialah selepas menyalin fail dalam fail docker saya perlu 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

Atas ialah kandungan terperinci Docker: "fail go.mod tidak ditemui" apabila ia jelas wujud. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam