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

王林
Lepaskan: 2024-02-09 15:30:10
ke hadapan
424 orang telah melayarinya

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
Salin selepas log masuk

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
Salin selepas log masuk

Fail buruh pelabuhan saya:

FROM golang:1.21

WORKDIR /app

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

COPY . .
RUN go mod tidy
Salin selepas log masuk

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>
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan