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.
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