LivingRobot
LivingRobot

Reputation: 913

Go mod folders not found in Docker

I'm very new to go modules and am trying to take a project and update it to use them as they seem like a really great way to finally handle my dependencies. However, I'm having an issue getting things to build in Docker.

I have a project with a main.go and a go.mod file (which references both private/local repos as well as public ones like go.uber.org/zap). I've named my module github.internal.com/team_name/project_name I've vendored up my dependencies. So, my project structure looks like:

project
- main.go
- internal
  - utils.go
- go.mod (github.internal.com/team_name/project_name)
- vendor
  - go.uber.org
  - private.repo.com
Dockerfile

Then, in main.go I import

import (
    "github.internal.com/team_name/project_name/internal"
    "go.uber.org/zap"
)

All of this works great and I can run go build no problem.

The issue comes when I try to build using Docker. In my Dockerfile I run

ENV GOPATH /go
COPY . /go/src/github.internal.com/team_name/project_name
WORKDIR /go/src/github.internal.com/team_name/project_name
RUN CGO_ENABLED=0 GOOS=linux go build -a -o slaxtract main.go

When I run docker build it returns:

main.go:7:2: cannot find package "github.internal.com/team_name/project_name/internal" in any of:
    /go/src/github.internal.com/project_name/team_name/vendor/github.internal.com/project_name/team_name/internal (vendor tree) 
    /usr/local/go/src/github.internal.com/team_name/project_name/internal (from $GOROOT)
    /go/src/github.internal.com/team_name/project_name/internal (from $GOPATH)

How do I get to the right directory to recognize all of my files in my module?

Thanks in advance!

Upvotes: 0

Views: 3255

Answers (1)

Gustavo Paiva
Gustavo Paiva

Reputation: 156

Make sure go has the go modules enabled, you can enforce this by setting the env var GO111MODULE to on.

Also as you have vendored your modules dependencies you should build using the mod=vendor flag as: go build -mod=vendor

Something like CGO_ENABLED=0 GOOS=linux GO111MODULE=on go build -mod=vendor -a -o slaxtract main.go should work.

Upvotes: 2

Related Questions