Включите зависимости Go в Docker-контейнер, используя моно репо

У меня есть моно репо со структурой.

mono-repo
- serviceA
 - main.go
 - Dockerfile
-serviceB
 - main.go
 - Dockerfile
go.mod
go.sum

Dockerfile в serviceA содержит следующий код.

FROM golang

ENV GO111MODULE=on

WORKDIR /app

COPY . .

RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build

ENTRYPOINT ["/app/serviceA"]

Я хочу создать образ Docker и включить зависимости от корня моего моно-репо в контейнер, в настоящее время я получаю сообщение об ошибке, в котором говорится, что при запуске я не могу найти ни один из пакетов зависимостей

Docker build -t serviceA .

Пока я не помещаю go.mod в сервис A, я не вижу хорошего способа достичь того, чего хочу. Размещая go.mod внутри сервиса, я чувствую, что теряю преимущество совместного использования сервисов в репо.

1 ответ

Решение

Размещая go.mod внутри сервиса, я чувствую, что теряю преимущество совместного использования сервисов в репо.

Тем не менее, это подход, замеченный здесь или там, где COPY go.mod . (а также COPY go.sum .) сопровождается RUN go mod download,

#This is the ‘magic’ step that will download all the dependencies that are specified in 
# the go.mod and go.sum file.
# Because of how the layer caching system works in Docker, the  go mod download 
# command will _ only_ be re-run when the go.mod or go.sum file change 
# (or when we add another docker instruction this line)
RUN go mod download
Другие вопросы по тегам