#docker #go #golang-migrate
#docker #Вперед #golang-миграция
Вопрос:
У меня есть моно-репозиторий со структурой.
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 и включить зависимости из корня моего mono-repo внутри контейнера, в настоящее время я получаю сообщение об ошибке, в котором говорится, что он не может найти ни один из пакетов зависимостей при запуске
docker build -t ServiceA .
Если я не помещу go.mod внутри ServiceA, я не вижу хорошего способа достичь того, чего я хочу. Размещая 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
Комментарии:
1. На самом деле это не отвечает на вопрос. Локальные зависимости (ServiceB) не извлекаются через
go mod download
2. @RicardoTomasi Какая
go
команда затем загрузит эти локальные зависимости?go get
(с Go 1.16 )?