简体   繁体   English

如何在 docker 中运行 golang 服务器

[英]How to run golang server in docker

I setup a simple server with golang:我用 golang 设置了一个简单的服务器:

package main

import (
    "golang-server/database"
    "golang-server/helper"
    "log"
    "net/http"
)

func main() {
    database.Connect()
    port := helper.GetPort()

    SetupRoutes()

    log.Printf("connect to http://localhost:%s/ for GraphQL playground", port)
    log.Fatal(http.ListenAndServe(":"+port, router))

}

Here is what my folder structure look like:这是我的文件夹结构的样子:

在此处输入图像描述

Here is what my dockerfile look like:这是我的 dockerfile 的样子:

FROM golang:1.18

WORKDIR $GOPATH/src

COPY . .

RUN go mod download
RUN go build -o /golang-server

EXPOSE 8080

CMD ["golang-server"]

I am running these docker commands in the main directory:我在主目录中运行这些 docker 命令:

docker build . -t golang-server 

docker run --network=golang-server --name=golang-server golang-server

However I am getting this error when I run:但是,当我运行时出现此错误:

docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: exec: "golang-server": executable file not found in $PATH: unknown. docker:来自守护进程的错误响应:未能创建 shim 任务:OCI 运行时创建失败:runc 创建失败:无法启动容器进程:exec:“golang-server”:在 $PATH 中找不到可执行文件:未知。

What should I set the dockerfile so I can successfully deploy to docker?我应该如何设置 dockerfile 才能成功部署到 docker?

The problem is related with your last line in Dockerfile CMD ["golang-server"] .该问题与您在 Dockerfile CMD ["golang-server"]中的最后一行有关。 When you put it there, the system (inside of the container) are trying to find an executable file inside of your $PATH variable called golang-server .当你把它放在那里时,系统(在容器内)试图在你的$PATH变量中找到一个名为golang-server的可执行文件。

To solve this issue, you can just edit your last line from your Dockerfile to CMD ["/golang-server"] , once you are building your application in / ( RUN go build -o /golang-server ).要解决此问题,您只需将最后一行从 Dockerfile 编辑到CMD ["/golang-server"] ,一旦您在/ ( RUN go build -o /golang-server应用程序。9 The final Dockerfile should be something like:最终的 Dockerfile 应该是这样的:

FROM golang:1.18

WORKDIR $GOPATH/src

COPY . .

RUN go mod download
RUN go build -o /golang-server

EXPOSE 8080

CMD ["/golang-server"]

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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