亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

go build 找不到 docker 上的本地依賴

go build 找不到 docker 上的本地依賴

Go
拉丁的傳說 2022-10-17 16:06:37
我正在嘗試為我的 go 服務器創建一個 dockerfile,但它一直失敗,因為它無法識別一些本地依賴項(它們是代碼本身的模塊,而不是外部依賴項)。例子:import (    "<private-repo-url>/src/cmd/http-api/bootstrap" // this a local module that's part of the server    "go.uber.org/fx")func main() {    fx.New(bootstrap.Module).Run()}這是錯誤: => ERROR [7/7] RUN go build -a -o ./server                                                                                                                                                                        0.3s------ > [7/7] RUN go build -a -o ./server:#10 0.295 server.go:4:2: no required module provides package <private-repo-url>/src/cmd/http-api/bootstrap; to add it:#10 0.295       go get <private-repo-url>/src/cmd/http-api/bootstrap------executor failed running [/bin/sh -c go build -a -o ./server]: exit code: 1請注意,此private-repo-url對應于此應用程序的存儲庫(它不是外部依賴項)。這是 DockerfileFROM golang:1.17WORKDIR /balrog# Copy dependency definitions and download themADD go.mod .ADD go.sum .RUN go mod download# Build the binaryADD ./src .ENV CGO_ENABLED=0ENV GOOS=linuxENV GOARCH=amd64RUN go build -a -o ./server#Run the serverCMD ["/server"]還有 mod.go 文件:module <private-repo-url>go 1.16require (    github.com/gin-gonic/gin v1.7.7    github.com/google/uuid v1.3.0    github.com/kelseyhightower/envconfig v1.4.0    github.com/sirupsen/logrus v1.8.1    go.uber.org/fx v1.15.0)我讀過GO111MODULE說它應該打開,并且我還讀到它從 1.17 開始默認啟用(這里)。同樣根據官方 docker 映像(在dockerhub中),正確的方法是在復制所有文件后使用go get和go install 。這種方法使我遇到了一個稍微不同的問題,即 docker 無法訪問存儲庫(因為它是私有的)并且我想避免向 docker 添加憑據。我嘗試使用環境變量GOVCS設置它的值,例如:ENV GOVCS=github.com:git,gitlab.com:off但它仍然失敗并出現同樣的錯誤。最后我嘗試了替換,我認為如果我從本地依賴項中刪除它會起作用,所以我執行了(在 Dockerfile 中)這個:RUN go mod edit -replace <private-repo-url>=./有什么方法可以防止 go builder/package installer 在外部查找這些文件?由于go mod和go get + go install 都嘗試訪問此私有存儲庫,但由于它們無權訪問而失敗。但是他們不應該首先嘗試訪問它,因為它是應用程序的存儲庫......或者我做錯了什么(顯然或者我不會在這里),錯過了什么?
查看完整描述

1 回答

?
aluckdog

TA貢獻1847條經驗 獲得超7個贊

ADD ./src .- 將內容復制src到當前文件夾,剝離src部分。

它應該只是COPY . ./

另請注意,不建議src在源代碼樹中包含子文件夾 - 包含的文件夾go.mod已經是源代碼樹。


查看完整回答
反對 回復 2022-10-17
  • 1 回答
  • 0 關注
  • 163 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號