我正在嘗試構建一個 Docker 容器,并使用go get命令和cds 到結果目錄中,以便執行一些后續命令(即make deps、make build和COPY將相關的生成二進制文件放入容器的PATH) 中。到目前為止我已經嘗試過這個Dockerfile:FROM golang:latestENV GO111MODULE onRUN ["go", "get", "github.com/micromdm/scep"]RUN cd $GOPATH/src/github.com/micromdm/scep但是,如果我嘗試運行它,我會收到以下錯誤:> docker build . --tag loadtestSending build context to Docker daemon? 4.608kBStep 1/4 : FROM golang:latest?---> 52b59e9ead8eStep 2/4 : ENV GO111MODULE on?---> Using cache?---> 28335bf0142bStep 3/4 : RUN ["go", "get", "github.com/micromdm/scep"]?---> Using cache?---> 86760bf0c490Step 4/4 : RUN cd $GOPATH/src/github.com/micromdm/scep?---> Running in b86fc3ab0ab8/bin/sh: 1: cd: can't cd to /go/src/github.com/micromdm/scepThe command '/bin/sh -c cd $GOPATH/src/github.com/micromdm/scep' returned a non-zero code: 2如果我嘗試該命令而不將GO111MODULE環境變量設置為on,我會收到他的錯誤:> docker build . --tag loadtestSending build context to Docker daemon? 4.608kBStep 1/3 : FROM golang:latest?---> 52b59e9ead8eStep 2/3 : RUN ["go", "get", "github.com/micromdm/scep"]?---> Running in 8cb54311a416package github.com/micromdm/scep: no Go files in /go/src/github.com/micromdm/scepThe command 'go get github.com/micromdm/scep' returned a non-zero code: 1在https://github.com/ponzu-cms/ponzu/issues/204之后,我還嘗試...在最后運行它,FROM golang:latestRUN ["go", "get", "github.com/micromdm/scep/..."]RUN cd $GOPATH/src/github.com/micromdm/scep \但這會導致> docker build . --tag loadtestSending build context to Docker daemon? 4.608kBStep 1/3 : FROM golang:latest?---> 52b59e9ead8eStep 2/3 : RUN ["go", "get", "github.com/micromdm/scep/..."]?---> Running in 961bae3bb455# github.com/micromdm/scep/scep關于如何實現下載包并將其cd放入結果目錄的任何想法?
3 回答

慕桂英3389331
TA貢獻2036條經驗 獲得超8個贊
首先,在 docker 中,您正在構建一個容器,因此嘗試 cd 到您電腦中的目錄是不可能的。使用 WORKDIR 命令,也建議將 git clone 到存儲庫中并創建 Dockerfile,然后將其中的所有內容復制到 docker 內的目錄中,例如:
COPY . /app
WORKDIR /app/where_you_want_to_cd
RUN whatever_you_want_to_run

江戶川亂折騰
TA貢獻1851條經驗 獲得超5個贊
你可以把這個路徑設置為你的WORKDIR,后續的命令就很簡單了。
從docker 構建器參考 來看,每個 RUN 命令都是獨立運行的。所以這樣做RUN cd
對下一個RUN命令沒有任何影響。
以下 Dockerfile 有效:
FROM golang:latest
ENV GO111MODULE on
RUN go get github.com/micromdm/scep
WORKDIR /go/src/github.com/micromdm/scep
您需要在這里,GO111MODULE因為該模塊中go.mod沒有定義 go 版本,因此您需要自己激活它。
- 3 回答
- 0 關注
- 199 瀏覽
添加回答
舉報
0/150
提交
取消