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