[英]Issue during running server written in go under the local Docker container (Windows, wsl-2)
我有一个用 golang 编写的服务器代码,它监听 http 并在我的开发机器上的localhost:27017
连接到 mongodb,并且在同一主机上的 aws ec-2 实例上。 当我通过go run main.go
运行它时,一切都运行良好。
sudo docker build -t server /mnt/c/code/tttfm/backend/server
返回
=> [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
但是当我试图运行它时退出 go 错误sudo docker run -it server
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
线条是
import...
"go.mongodb.org/mongo-driver/bson"
"github.com/google/uuid"
看起来像另一个导入良好的组件,例如:
"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
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 容器下运行服务器时遇到问题。 可能是什么问题? 非常感谢您的帮助
如评论中所述,您构建的容器完全错误。
我假设您正在使用go 模块。
我使用多阶段构建来创建小容器的正确方法。
在第一阶段,我们构建二进制文件。
在第二阶段,我们复制二进制文件并构建容器。
#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"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.