为了账号安全,请及时绑定邮箱和手机立即绑定

在 Docker 中,无法使用“go get”cd 进入安装目录吗?

在 Docker 中,无法使用“go get”cd 进入安装目录吗?

Go
波斯汪 2023-07-31 14:51:33
我正在尝试构建一个 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


查看完整回答
反对 回复 2023-07-31
?
江户川乱折腾

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 版本,因此您需要自己激活它。


查看完整回答
反对 回复 2023-07-31
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

事实证明,生成的代码不是位于 中/go/src,而是位于 中/go/pkg



查看完整回答
反对 回复 2023-07-31
  • 3 回答
  • 0 关注
  • 97 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信