2

I have a mono repo with the structure.

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

The Dockerfile in serviceA contains the following code.

FROM golang

ENV GO111MODULE=on

WORKDIR /app

COPY . .

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

ENTRYPOINT ["/app/serviceA"]

I want to build the Docker image and include the dependencies from the root of my mono-repo inside the container, I am currently receiving an error saying it can't find any of the dependency packages when I run

docker build -t serviceA .

Unless I place a go.mod inside serviceA I can't see a nice way of achieving what I want. By placing a go.mod inside the service it feels like I'm losing the advantage of services sharing dependencies within the repo.

pocockn
  • 1,965
  • 5
  • 21
  • 36

1 Answers1

0

By placing a go.mod inside the service it feels like I'm losing the advantage of services sharing dependencies within the repo.

Yet, this is an approach seen here or there, where COPY go.mod . (and COPY go.sum .) is followed by 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
VonC
  • 1,262,500
  • 529
  • 4,410
  • 5,250
  • This doesn't really answer the question. Local dependencies (serviceB) are not fetched via `go mod download` – Ricardo Tomasi Feb 10 '22 at 14:44
  • @RicardoTomasi What `go` command would then download those local dependencies? `go get` (with Go 1.16+)? – VonC Feb 10 '22 at 14:53