Ошибка «Нет файлов в ...» при использовании go с docker compose - PullRequest
0 голосов
/ 29 декабря 2018

Я установил Go на Ubuntu 16.04.Это моя GOPATH = / home / {имя пользователя} /work.

Я создал проект в /home/ndomusername‹/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.

Я не смог найти никакого решения.

Конфигурацияservice 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

1 Ответ

0 голосов
/ 29 декабря 2018

В вашем 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 .

, и какой каталог является текущим каталогом, имеет значение.

...