Reputation: 839
I introduced local package with go modules
for server side api. It works fine in local environment without error by commanding go run main.go
.
But it does not work when commanding docker-compose up
.
I want to know how to fix Dockerfile
and docker-compose.yml
.
I command go mod init
at article
directory.
As result, it sets module github.com/jpskgc/article
in go.mod.
article
├ db
├ client
├ api
│ ├ main.go
│ ├ controller
│ │ └ controller.go
│ └ Dockerfile
├ nginx
├ docker-compose.yml
├ go.mod
└ go.sum
main.go
package main
import (
"database/sql"
"os"
"time"
"github.com/gin-contrib/cors"
"github.com/gin-gonic/gin"
_ "github.com/go-sql-driver/mysql"
"github.com/joho/godotenv"
"github.com/jpskgc/article/api/controller"
)
api := router.Group("/api")
{
api.GET("/articles", func(c *gin.Context) {
controller.GetArticleController(c, db)
})
}
router.Run(":2345")
}
Dockerfile
FROM golang:latest
ENV GO111MODULE=on
WORKDIR /app
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
ENTRYPOINT ["/app/api"]
docker-compose.yml
version: '3'
services:
api:
build:
dockerfile: Dockerfile.dev
context: ./api
volumes:
- ./api:/app
depends_on:
- db
tty: true
environment:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_HOST
- GO111MODULE
go.mod
module github.com/jpskgc/article
go 1.12
require (
github.com/aws/aws-sdk-go v1.23.7
github.com/gin-contrib/cors v1.3.0
github.com/gin-gonic/gin v1.4.0
github.com/go-sql-driver/mysql v1.4.1
github.com/google/uuid v1.1.1
github.com/joho/godotenv v1.3.0
)
I expect server side api working fine without error in docker environment. But the actual is that docker environment for server side fails to run.
Here is error message when commanding docker-compose up
api_1 | main.go:14:2: cannot find package "github.com/jpskgc/article/api/controller" in any of:
api_1 | /usr/local/go/src/github.com/jpskgc/article/api/controller (from $GOROOT)
api_1 | /go/src/github.com/jpskgc/article/api/controller (from $GOPATH)
Here is the entire source code on github (branch: try-golang-mod).
Upvotes: 0
Views: 1113
Reputation: 1158
looks like PATH issue try this Dockerfile
FROM golang:latest
ENV GO111MODULE=on
WORKDIR /go/src/github.com/user/myProject/app
COPY . .
RUN go mod download
RUN go build
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
ENTRYPOINT ["/go/src/github.com/user/myProject/app/api"]
Set Volume in compose file to:
./api:/go/src/github.com/user/myProject/app
not tested, actual results may vary, but hopefully helps
Upvotes: 0
Reputation: 5284
This error message seems to indicate that Go modules are not enabled:
Here is error message when commanding docker-compose up
api_1 | main.go:14:2: cannot find package "github.com/jpskgc/article/api/controller" in any of:
api_1 | /usr/local/go/src/github.com/jpskgc/article/api/controller (from $GOROOT)
api_1 | /go/src/github.com/jpskgc/article/api/controller (from $GOPATH)
I would double check that the GO111MODULE=on
environment variable is being set and propagated properly.
There are some other things you could check here:
Upvotes: 0