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

我在 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 builder


RUN apk update && apk add git && go get gopkg.in/natefinch/lumberjack.v2


RUN mkdir -p /go/src/project-name/services/configuration

RUN CGO_ENABLED=0

RUN GOOS=linux

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

ENV GOPATH /go

WORKDIR /go/src/project-name/services/configuration/api

RUN go get

RUN go build


FROM alpine

RUN apk update

RUN apk add curl


RUN mkdir -p /app

COPY --from=builder /go/src/project-name/services/configuration/api/ /app/

RUN chmod +x /app/api

WORKDIR /app

EXPOSE 5001

ENTRYPOINT ["/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


慕田峪9158850
浏览 284回答 1
1回答

慕容3067478

在你的 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 .当前目录是什么目录很重要。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go