为了账号安全,请及时绑定邮箱和手机立即绑定

在 Dockerfile 和 docker-compose.yml 中编写什么代码以在 docker

在 Dockerfile 和 docker-compose.yml 中编写什么代码以在 docker

Go
茅侃侃 2023-07-17 14:36:31
我介绍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 的父目录),然后将文件/目录从那里复制到映像中。


查看完整回答
反对 回复 2023-07-17
?
交互式爱情

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


查看完整回答
反对 回复 2023-07-17
  • 2 回答
  • 0 关注
  • 118 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信