【问题标题】:$GOPATH/go.mod exists but should not when building docker container, but works if I manually run commands$GOPATH/go.mod 存在,但在构建 docker 容器时不应该存在,但如果我手动运行命令则有效
【发布时间】:2020-08-15 05:31:03
【问题描述】:

我正在使用来自 Dockerfile 的 go-redis 构建一个 golang:1.14.2 docker 容器。

FROM golang:1.14.2

# project setup and install go-redis
RUN mkdir -p /go/delivery && cd /go/delivery && \
    go mod init example.com/delivery && \
    go get github.com/go-redis/redis/v7 

# important to copy to /go/delivery
COPY ./src /go/delivery

RUN ls -la /go/delivery

RUN go install example.com/delivery
ENTRYPOINT ["delivery"]

但是,当我尝试使用 docker-compose up --build -d 构建容器时,我收到此错误:$GOPATH/go.mod exists but should not ERROR: Service 'delivery' failed to build: The command '/bin/sh -c go get github.com/go-redis/redis/v7' returned a non-zero code: 1

但是,我可以使用来自 dockerfile docker container run -it --rm golang:1.14.2 的映像创建一个 docker 容器,然后运行与 Dockerfile 中完全相同的命令,delivery 会按照我的预期进行。 ``

这里是deliver.go:

package main

import (
    "fmt"

    "github.com/go-redis/redis/v7"
)

func main() {
    // redis client created here... 

    fmt.Println("inside main...")
}

我做错了什么?我查找了此错误消息,但我所见过的解决方案都没有为我工作。

编辑:这是撰写文件:

version: '3.4'
services:
  ...
  delivery:
    build: ./delivery
    environment:
      - REDIS_PORT=${REDIS_PORT}
      - REDIS_PASS=${REDIS_PASS}
      - QUEUE_NAME-${QUEUE_NAME}
    volumes: 
      - ./logs:/logs

【问题讨论】:

  • 听起来有些东西正在设置GOPATH=/go/delivery,但它不应该是。它可能是该图像的默认值。
  • 您也应该添加撰写文件,正如您所说的那样,问题可能就在那里,并且可能是因为您正在安装的某个目录。
  • 同时运行go install example.com/delivery 不会使用本地资源,它将使用go install example.com/delivery 发布的repo 中的资源。要使用您想要 cd 到项目的本地资源,只需运行 go install,或者更好的是 go build
  • 如果这是为了分发/运行应用程序而不仅仅是构建它,我会完全放弃它。 Go 应用程序是自包含的二进制文件,在运行时不需要工具链。用于运行程序的 Docker 容器应该只是一个基础容器,其中包含已编译的二进制文件。
  • @Adrian 执行复制的二进制文件的命令是否类似于CMD ["/bin/bash", "<binary_name>"]

标签: docker go dockerfile go-redis


【解决方案1】:

我也有同样的问题。您需要设置 WORKDIR /go/delivery

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-29
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多