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

当我使用 go with docker compose 时出现“No Go files in...”

当我使用 go with docker compose 时出现“No Go files in...”

Go
慕田峪9158850 2023-05-22 17:17:38
我在 Ubuntu 16.04 上安装了 Go。这是我的 GOPATH=/home/{username}/work。我在 /home/{username}/work/src 中创建了一个项目。这是我的项目文件夹层次结构。project-name   services       configuration           api               main.go           Dockerfile       bff           api               main.go           Dockerfile   docker-compose.yml   favicon.ico   README.md我可以使用我的 dockerfile 构建和运行,但我无法使用 docker-compose 构建和运行。我找不到任何解决方案。配置服务dockerfile:FROM golang:1.11.1-alpine3.8 as builderRUN apk update && apk add git && go get gopkg.in/natefinch/lumberjack.v2RUN mkdir -p /go/src/project-name/services/configurationRUN CGO_ENABLED=0RUN GOOS=linuxADD . /go/src/project-name/services/configurationENV GOPATH /goWORKDIR /go/src/project-name/services/configuration/apiRUN go getRUN go buildFROM alpineRUN apk updateRUN apk add curlRUN mkdir -p /appCOPY --from=builder /go/src/project-name/services/configuration/api/ /app/RUN chmod +x /app/apiWORKDIR /appEXPOSE 5001ENTRYPOINT ["/app/api"]它适用于 dockerfile。这是我的 docker-compose 文件:version: '3.4'services:   bff:      image: project-name/bff:${TAG:-latest}      build:           context: .           dockerfile: services/bff/Dockerfile      ports:          - "5000:5000"      container_name: bff       depends_on:         - configuration   configuration:       image: project-name/configuration:${TAG:-latest}       build:            context: .            dockerfile: services/configuration/Dockerfile           ports:            - "5001:5001"       container_name: configuration它没有用。运行“run go get”命令时,报错,报错为: can't load package: package project-name/services/configuration/api: no Go files in /go/src/project-name/services/configuration/api ERROR: Service 'configuration' failed to build: The command '/bin/sh -c go get' returned a non-zero code: 1
查看完整描述

1 回答

?
慕容3067478

TA贡献1773条经验 获得超3个赞

在你的 Dockerfile 中,你说

ADD . /go/src/project-name/services/configuration

它期望主机上的构建上下文目录包含源文件。但是你的docker-compose.yml文件说

build:
    context: .
    dockerfile: services/configuration/Dockerfile

其中上下文目录是源代码控制树的根目录,而不是您要构建的特定 Go 源代码目录。如果你把这个改成

build:    context: services/configuration
    # Default value of "dockerfile: Dockerfile" will be right

它可能会更好地工作。

在普通的 Docker 命令中,您当前的docker-compose.yml文件相当于

cd $GOPATH/src/project-name
docker build -f services/configuration/Dockerfile .

但你可能真的在跑步

cd $GOPATH/src/project-name/services/configuration
docker build .

当前目录是什么目录很重要。


查看完整回答
反对 回复 2023-05-22
  • 1 回答
  • 0 关注
  • 268 浏览
慕课专栏
更多

添加回答

举报

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