gpt4 book ai didi

docker - 在Dockerfile和docker-compose.yml中编写什么以在docker环境中传递本地包

转载 作者:数据小太阳 更新时间:2023-10-29 03:40:18 24 4
gpt4 key购买 nike

我为服务器端 api 引入了 local packagego modules
通过命令 go run main.go,它在本地环境中运行良好,没有错误。

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

我想知道编写 Dockerfile 和 docker-compose.yml 来修复什么。

我在 article 目录下命令 go mod init

因此,它在 go.mod 中设置了 module github.com/jpskgc/article

article
├ db
├ client
├ api
│ ├ main.go
│ ├ controller
│ │ └ controller.go
│ └ Dockerfile
├ nginx
├ docker-compose.yml
├ go.mod
└ go.sum

主.go

package main

import (
"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")
}

docker 文件

FROM golang:latest
ENV GO111MODULE=on
WORKDIR /go/src/github.com/jpskgc/article/app
COPY . .
RUN go mod download
RUN go build
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build
ENTRYPOINT ["/go/src/github.com/jpskgc/article/app/api"]

docker-compose.yml

version: '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
- 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 时的错误消息

build command-line-arguments: 
cannot load github.com/jpskgc/article/api/controller:
cannot find module providing package github.com/jpskgc/article/api/controller
article_api_1 exited with code 1

这里是github上的全部源代码(分支:try-golang-mod)。我希望有人给我 Dockerfiledocker-compose.yml 的答案代码。 https://github.com/jpskgc/article/tree/try-golang-mod

最佳答案

您的 docker 上下文是 ./api,但 go.mod 在父目录中,因此 go.mod 不包含在您的镜像中。

一种选择是将您的 docker 上下文更改为源代码树的根目录(api 的父目录),然后将文件/目录从那里复制到图像中。

关于docker - 在Dockerfile和docker-compose.yml中编写什么以在docker环境中传递本地包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57647727/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com