繁体   English   中英

在Dockerfile和docker-compose中编码要传递本地软件包的内容

[英]What to code in Dockerfile and docker-compose to pass local package

我为服务器端api引入了带有go modules本地包。 通过命令go run main.go可以在本地环境中正常工作而不会出错。

但是在命令docker-compose up时它不起作用。

我想知道如何修复Dockerfiledocker-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环境变量。

您还可以在这里查看其他一些信息:

https://github.com/golang/go/wiki/Modules#what-are-some-general-things-i-can-spot-check-if-i-am-seeing-a-problem

看起来像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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM