首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在本地Docker容器(Windows、wsl-2)下运行go编写的服务器时出现问题

在本地Docker容器(Windows、wsl-2)下运行go编写的服务器时出现问题
EN

Stack Overflow用户
提问于 2021-04-18 23:39:26
回答 1查看 56关注 0票数 2

我有一个用golang编写的服务器代码,它在我的开发机器和aws ec-2实例上的localhost:27017上侦听http并连接到mongodb,也是在同一主机上。当我通过go run main.go运行它时,一切都运行正常。

sudo docker build -t server /mnt/c/code/tttfm/backend/server返回

代码语言:javascript
运行
复制
 => [internal] load build definition from Dockerfile                                                                                           0.1s 
 => => transferring dockerfile: 38B                                                                                                            0.0s 
 => [internal] load .dockerignore                                                                                                              0.1s 
 => => transferring context: 2B                                                                                                                0.0s 
 => [internal] load metadata for docker.io/library/golang:1.16.3-buster                                                                        2.3s 
 => [1/6] FROM docker.io/library/golang:1.16.3-buster@sha256:2ff1a0d92edf6c2d4a2dd0d6bfa43e512c8b2f3aac738ffbb6195caf7cb38164                  0.0s 
 => [internal] load build context                                                                                                              0.2s 
 => => transferring context: 684B                                                                                                              0.2s 
 => CACHED [2/6] WORKDIR /code                                                                                                                 0.0s 
 => CACHED [3/6] RUN apt-get update                                                                                                            0.0s 
 => CACHED [4/6] RUN go get go.mongodb.org/mongo-driver/mongo                                                                                  0.0s 
 => CACHED [5/6] RUN go get github.com/google/uuid                                                                                             0.0s 
 => CACHED [6/6] COPY . .                                                                                                                      0.0s 
 => exporting to image                                                                                                                         0.0s 
 => => exporting layers                                                                                                                        0.0s 
 => => writing image sha256:9e215e06bf4ede636b31706af38497653bcaa5f3407de50ba7cc9a951be614bd                                                   0.0s 
 => => naming to docker.io/library/server 

但是当我试图运行它的时候,它是Exit with go errors sudo docker run -it server

代码语言:javascript
运行
复制
api/build/build.go:17:2: cannot find package
api/events/events.go:14:2: cannot find package
api/events/events.go:15:2: cannot find package
mongodb/mongodb.go:8:2: cannot find package
mongodb/mongodb.go:9:2: cannot find package

这些线条是

代码语言:javascript
运行
复制
import...
"go.mongodb.org/mongo-driver/bson"
"github.com/google/uuid"

看起来像是另一个很好地导入的组件,例如:

代码语言:javascript
运行
复制
    "net/http"
    api "./api"
    build "./api/build"
    mongodb "./mongodb"
    storage "./storage"
    webChat "./webChat"

但它在外部组件上发生了故障:导入期间运行时的"github.com/google/uuid" and "go.mongodb.org/mongo-driver/bson"

dockerfile

代码语言:javascript
运行
复制
FROM golang:1.16.3-buster
WORKDIR /code
RUN apt-get update
RUN go get go.mongodb.org/mongo-driver/mongo
RUN go get github.com/google/uuid
COPY . .

CMD ["go", "run", "main.go"]

我是docker的新手,在docker容器下运行服务器时遇到了问题。问题可能是什么?非常感谢您的帮助

EN

回答 1

Stack Overflow用户

发布于 2021-04-19 15:45:10

正如评论中提到的,构建容器是完全错误的。

我假设您使用的是go modules

正确的方法是使用多阶段构建来创建小容器。

在第一阶段,我们构建二进制文件。

在第二阶段,我们复制二进制文件并构建容器。

代码语言:javascript
运行
复制
#First stage 
FROM golang:1.16-buster as builder
WORKDIR /app
COPY go.* ./
# Download dependencies 
RUN go mod download
# Copy local code to the container image.
COPY . .
# Build the binary.
RUN  go build -v -o BINERYNAME

# Secound stage 
FROM debian:buster-slim
RUN set -x && apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y \
    ca-certificates && \
    rm -rf /var/lib/apt/lists/*
# Copy the binary  to  production image from the builder stage.
COPY --from=builder /app/BINERYNAME /app/BINERYNAME

# Run app on container startup.
CMD ["/app/BINERYNAME"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67150369

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档