我介绍local package了go modules服务器端 api。在本地环境下运行正常,通过命令不会报错go run main.go。但在指挥的时候却不起作用docker-compose up。我想知道要编写 Dockerfile 和 docker-compose.yml 来修复哪些问题。go mod init我在目录下命令article。结果,它设置module github.com/jpskgc/article在go.mod.article ├ db ├ client ├ api │ ├ main.go │ ├ controller │ │ └ controller.go │ └ Dockerfile ├ nginx ├ docker-compose.yml ├ go.mod └ go.sum主程序package mainimport ( "database/sql" "os" "time" "github.com/gin-gonic/gin" "github.com/jpskgc/article/api/controller") api := router.Group("/api") { api.GET("/articles", func(c *gin.Context) { controller.GetArticleController(c, db) }) } router.Run(":2345")}DockerfileFROM golang:latestENV GO111MODULE=onWORKDIR /go/src/github.com/jpskgc/article/appCOPY . .RUN go mod downloadRUN go buildRUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go buildENTRYPOINT ["/go/src/github.com/jpskgc/article/app/api"]docker-compose.ymlversion: '3'services: api: build: dockerfile: Dockerfile.dev context: ./api volumes: - ./api:/go/src/github.com/jpskgc/article/app depends_on: - db tty: true environment: - AWS_ACCESS_KEY_ID - AWS_SECRET_ACCESS_KEY - MYSQL_USER - MYSQL_PASSWORD - MYSQL_HOST - GO111MODULEgo.modmodule github.com/jpskgc/articlego 1.12require ( 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)我希望服务器端 api 在 docker 环境中正常工作,不会出现错误。但实际情况是服务端的docker环境无法运行。这是命令 docker-compose up 时的错误消息build command-line-arguments: cannot load github.com/jpskgc/article/api/controller: cannot find module providing package github.com/jpskgc/article/api/controllerarticle_api_1 exited with code 1这是 github 上的完整源代码(分支:try-golang-mod)。我希望有人给我Dockerfile和的答案代码docker-compose.yml。 https://github.com/jpskgc/article/tree/try-golang-mod
2 回答
动漫人物
TA贡献1815条经验 获得超10个赞
您的 docker 上下文是 ./api,但 go.mod 位于父目录中,因此 go.mod 不包含在您的映像中。
一种选择是将 docker 上下文更改为源树的根目录(api 的父目录),然后将文件/目录从那里复制到映像中。
交互式爱情
TA贡献1712条经验 获得超3个赞
我通过以下方式解决这个问题。
go mod init article/api在api目录。
article
├ client
├ api
│ ├ main.go
│ ├ contoroller
│ │ └ contoroller.go
│ ├ //
│ ├ go.mod
│ ├ go.sum
│ └ Dockerfile
├ nginx
├ go.mod
├ go.sum
└ docker-compose.yml
使固定Docekrfile
FROM golang:latest
ENV GO111MODULE=on
WORKDIR /app
COPY go.mod .
COPY go.sum .
RUN go mod download
COPY . .
RUN go build
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
ENTRYPOINT ["/app/api"]
命令docker-compose down然后docker-compose up --build
- 2 回答
- 0 关注
- 118 浏览
添加回答
举报
0/150
提交
取消