【问题标题】:How to run "go mod download" from parent directory?如何从父目录运行“go mod download”?
【发布时间】:2021-12-31 16:22:41
【问题描述】:

项目结构:

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

最初,我从 prj2 内部运行 docker build .,但 docker 文件中没有 ADD 命令,但 RUN go mod download 失败:

go mod 下载:github.com/name/project/prj1@v0.0.0-00010101000000-000000000000(替换为../prj1/feature1/):阅读/prj1/feature1/go.mod:打开/prj1/ feature1/go.mod: 没有这样的文件或目录

所以,我在 docker 文件中添加了ADD 命令来复制 prj1。接下来,我 cd 到 project_dir 并运行 docker build -f ./prj2/DockerfileRUN go mod download 现在失败了

go mod 下载:没有指定模块(参见“go help mod download”)

所以基本上,我的问题是,我如何告诉 go 命令 go.mod 在 prj2 中?

【问题讨论】:

    标签: docker go go-modules


    【解决方案1】:

    考虑到您的替换指令引用 ../prj1,您的 ADD 应该是

    ADD ./prj1 ../prj1
    

    你应该从prj2 执行你的docker,而不是./prj2/Dockerfile,否则你的COPY go.* ./ 不会复制任何go 文件。

    正如评论的那样,这会将 prj1 从上下文中排除。所以你必须把你的 COPY 改成COPY ./prj2/go.* ./

    【讨论】:

    • 如果我从 prj2 内部运行 docker build,则 ADD 命令不会执行,因为 prj1 不在上下文中。我收到此错误“无法计算缓存键:“/prj1”未找到:未找到”。
    • @X09 所以你必须更改 COPY 命令。我已经相应地编辑了我的答案。
    【解决方案2】:

    我假设您的 docker build 命令包含用作构建上下文的路径?

    docker build -f ./prj2/Dockerfile .  # <- period
    

    如果是这样,您的构建正在project_dir/ 文件夹中运行。 project_dir/ 中没有 go.mod 文件。

    在尝试运行go mod download 之前,您应该将cd 放入prj2/ 目录

    FROM golang:1.17.5 as builder
    
    WORKDIR /app
    
    COPY go.* ./
    ADD ./prj1 ./prj1
    RUN cd prj2/ && go mod download
    

    【讨论】:

    • 感谢@Jesse 的回答。我收到一个错误“/bin/sh: 1: cd: can't cd to prj2”。
    • @X09 是的,这就是为什么,在我的回答中,我建议从 prj2 文件夹调用 docker
    猜你喜欢
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多