![](/img/trans.png)
[英]What to code in Dockerfile and docker-compose.yml to pass local package in docker environment
[英]What to code in Dockerfile and docker-compose to pass local package
我为服务器端api引入了带有go modules
本地包。 通过命令go run main.go
可以在本地环境中正常工作而不会出错。
但是在命令docker-compose up
时它不起作用。
我想知道如何修复Dockerfile
和docker-compose.yml
。
我在article
目录下命令go mod init
。
结果,它在go.mod中设置了module github.com/jpskgc/article
github.com/jpskgc/article。
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")
}
Docker文件
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
)
我希望服务器端api在docker环境中可以正常工作而不会出错。 但是实际情况是服务器端的docker环境无法运行。
这是命令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)
这是github上的完整源代码(分支:try-golang-mod)。
此错误消息似乎表明未启用Go模块:
这是命令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)
我将再次检查是否已正确设置和传播GO111MODULE=on
环境变量。
您还可以在这里查看其他一些信息:
看起来像PATH问题尝试此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"]
将撰写文件中的音量设置为:
./api:/go/src/github.com/user/myProject/app
未经测试,实际结果可能会有所不同,但希望能有所帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.