專案結構:
project_dir/
├── prj1/
│ ├── feature1/
│ ├─ |─ go.mod
│ ├─ |─ main.go
│ └─ |─ ...
│ └── ...
├── prj2/
│ ├── go.mod
│ ├── main.go
│ └── Dockerfile
│ └── ...
└── ...
prj2 中的代碼通過go mod edit -replace命令參考 prj1/feature1 中的函式。現在,這在本地運行良好,但我需要使用 Docker 進行部署,但我遇到了問題。
我的 docker 腳本如下所示:
FROM golang:1.17.5 as builder
WORKDIR /app
COPY go.* ./
ADD ./prj1 ./prj1
RUN go mod download
...
最初,我docker build .從 prj2 內部運行,ADD但RUN go mod download沒有在 docker檔案中輸入命令,但失敗了:
go mod下載:github.com/name/project/[email protected](替換為../prj1/feature1/):閱讀/prj1/feature1/go.mod:打開/prj1/feature1/go .mod:沒有這樣的檔案或目錄
因此,我將ADD命令添加到 docker 檔案中以復制 prj1。接下來,我 cd 到 project_dir 并運行 docker build -f ./prj2/Dockerfile但RUN go mod download現在失敗了
go mod 下載:未指定模塊(請參閱“go help mod 下載”)
所以基本上,我的問題是,我如何告訴 go 命令 go.mod 在 prj2 中?
uj5u.com熱心網友回復:
考慮到您的替換指令參考 ../prj1,您的 ADD 應該是
ADD ./prj1 ../prj1
并且您應該從prj2,而不是執行您的 docker ./prj2/Dockerfile,否則您COPY go.* ./將不會復制任何 go 檔案。
正如評論的那樣,這會將 prj1 從背景關系中排除。因此,您必須將 COPY 更改為COPY ./prj2/go.* ./
uj5u.com熱心網友回復:
我假設您的 docker build 命令包含用作構建背景關系的路徑?
docker build -f ./prj2/Dockerfile . # <- period
如果是這樣,您的構建正在project_dir/檔案夾中運行。中沒有go.mod檔案project_dir/。
你應該在嘗試運行之前cd進入prj2/目錄go mod download
FROM golang:1.17.5 as builder
WORKDIR /app
COPY go.* ./
ADD ./prj1 ./prj1
RUN cd prj2/ && go mod download
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/399430.html
