【问题标题】:"No Go files in..." error when i use go with docker compose当我将 go 与 docker compose 一起使用时出现“No Go files in ...”错误
【发布时间】:2018-12-30 01:52:35
【问题描述】:

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

【问题讨论】:

  • 你的lenitivo-server/services/configuration/api目录的内容是什么?
  • @Flimzy 只有一个文件是 main.go
  • 如果你发出命令docker make ./services/configuration/Dockerfile会发生什么?

标签: docker go docker-compose


【解决方案1】:

在你的 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 .

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

【讨论】:

  • 我明白,当我用“上下文:服务/配置”进行更改时,它起作用了!你也是对的。我运行了“cd $GOPATH/src/project-name/services/configuration docker build”。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2021-12-14
  • 2015-11-07
  • 2021-12-28
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-26
相关资源
最近更新 更多