如何在Docker容器上运行golang web app

如何在Docker容器上运行golang web app,docker,go,Docker,Go,我有一个使用go语言作为后端的web应用程序。当我运行我的网站时,我只做go-build/projectName然后它将在本地服务器端口8000上运行。如何在容器上运行此web应用?我可以在容器上运行像nginx这样的示例图像,但是如何为我的项目创建自己的图像呢。我使用以下代码在项目文件夹中创建了Dockerfile: FROM nginx:latest WORKDIR static/html/ COPY . /usr/src/app 然后使用Dockerfile创建了一个图像,但当我在容

我有一个使用go语言作为后端的web应用程序。当我运行我的网站时,我只做
go-build/projectName
然后它将在本地服务器端口8000上运行。如何在容器上运行此web应用?我可以在容器上运行像nginx这样的示例图像,但是如何为我的项目创建自己的图像呢。我使用以下代码在项目文件夹中创建了Dockerfile:

FROM nginx:latest

WORKDIR static/html/

COPY . /usr/src/app
然后使用Dockerfile创建了一个图像,但当我在容器上运行它并转到localhost:myPort/static/html/page.html时,它显示404页未找到。我的另一个问题是,docker是否只能在容器上运行静态页面?因为我的网站可以接收和发送数据。谢谢

(./todo是我的项目名和文件夹名)


(正如您看到的,容器立即退出)

我猜您没有将Docker端口暴露在容器外部。 这就是为什么您不能看到任何输出,而不仅仅是特定的to GO程序。 尝试将以下行添加到docker compose文件中

EXPOSE 80(whichever port you want it to be)
EXPOSE 443
EXPOSE 3306

这将使容器可以从外部访问

我猜您没有将Docker端口暴露在容器外部。 这就是为什么您不能看到任何输出,而不仅仅是特定的to GO程序。 尝试将以下行添加到docker compose文件中

EXPOSE 80(whichever port you want it to be)
EXPOSE 443
EXPOSE 3306
这将使容器可以从外部访问

  • 在Go中运行服务器不需要Nginx
  • 最好在Dockerfile中构建二进制文件
  • 以下是Dockerfile的外观:

    FROM golang:latest 
    RUN mkdir /app 
    ADD . /app/ 
    WORKDIR /app 
    RUN go build -o main .
    EXPOSE 8000
    CMD ["/app/main"]
    
  • 在Go中运行服务器不需要Nginx
  • 最好在Dockerfile中构建二进制文件
  • 以下是Dockerfile的外观:

    FROM golang:latest 
    RUN mkdir /app 
    ADD . /app/ 
    WORKDIR /app 
    RUN go build -o main .
    EXPOSE 8000
    CMD ["/app/main"]
    

    下面是我为我的GOlang web应用程序使用的
    Gin-gonic
    框架所做的- 我的Dockerfile:

    FROM golang:latest
    # Author
    MAINTAINER dangminhtruong
    # Create working folder
    RUN mkdir /app
    COPY . /app
    RUN apt -y update && apt -y install git
    RUN go get github.com/go-sql-driver/mysql
    RUN go get github.com/gosimple/slug
    RUN go get github.com/gin-gonic/gin
    RUN go get gopkg.in/russross/blackfriday.v2
    RUN go get github.com/gin-gonic/contrib/sessions
    WORKDIR /app 
    
    然后构建docker映像

    docker build-t web应用程序:最新版本。

    最后,启动我的web应用程序

    docker run-it-p80:8080-d网络应用程序:最新的go run main.go//My webapp从8080端口开始


    希望这是我为我的GOlang web应用程序使用Gin gonic框架所做的一切- 我的Dockerfile:

    FROM golang:latest
    # Author
    MAINTAINER dangminhtruong
    # Create working folder
    RUN mkdir /app
    COPY . /app
    RUN apt -y update && apt -y install git
    RUN go get github.com/go-sql-driver/mysql
    RUN go get github.com/gosimple/slug
    RUN go get github.com/gin-gonic/gin
    RUN go get gopkg.in/russross/blackfriday.v2
    RUN go get github.com/gin-gonic/contrib/sessions
    WORKDIR /app 
    
    然后构建docker映像

    docker build-t web应用程序:最新版本。

    最后,启动我的web应用程序

    docker run-it-p80:8080-d网络应用程序:最新的go run main.go//My webapp从8080端口开始



    希望此帮助信息

    在容器中运行golang web应用程序的最简单方法是从此处找到的官方golang图像开始:并按照“在应用程序中启动Go实例”部分的说明进行操作。您可以尝试从Docker容器中访问localhost的端口。在容器中运行golang web应用程序的最简单方法是从此处找到的官方golang图像开始:并按照“在应用程序中启动Go实例”部分的说明进行操作。您可以尝试从Docker容器中访问localhost的端口。为什么三个暴露?第一个是运行我的web应用程序的端口?为什么有三个?第一个是运行我的web应用的端口?您的web应用是自己运行还是在容器内运行?原因我的容器在运行后立即退出,但由于命令//go build;项目名称。所以我猜我的web应用程序是自己运行的,而不是在容器中运行我的web应用程序是在容器中运行的。您可以立即停止我的容器并设置它的入口点。现在可以显示docker文件吗?
    docker ps-a
    然后复制退出的docker容器名称id。然后检查容器日志详细信息<代码>docker logs--详细信息您的容器名称可能会有帮助您的web应用程序是自己运行的还是在容器内运行的?原因我的容器在运行后立即退出,但由于命令//go build;项目名称。所以我猜我的web应用程序是自己运行的,而不是在容器中运行我的web应用程序是在容器中运行的。您可以立即停止我的容器并设置它的入口点。现在可以显示docker文件吗?
    docker ps-a
    然后复制退出的docker容器名称id。然后检查容器日志详细信息<代码>docker日志--详细信息您的容器名称可能会有帮助CMD命令是什么,我应该执行CMD[“main.go”]?我对WORKDIR感到困惑,你应该选择哪个目录?thanksCMD告诉您启动容器时将执行什么。您不需要运行main.go,您需要先构建它(运行go build-o main.),然后/app/main将成为您的可执行路径。WORKDIR只是指你的容器的pwd。你如何让docker文件忽略一个包,因为我总是试图获取一个包,实际上它只是我导入到golang代码中的一个文件夹,如果我使用RUN go get github.com/folderName,我仍然会得到错误,因为它不在github上,而只是一个文件夹。感谢“找不到包github.com/rn1hd/todo/models”。但是在我的代码中,我刚刚导入了那个文件夹,因为它包含了我的一些.go文件,谢谢CMD命令是什么,我应该执行CMD[“main.go”]?我对WORKDIR感到困惑,你应该选择哪个目录?thanksCMD告诉您启动容器时将执行什么。您不需要运行main.go,您需要先构建它(运行go build-o main.),然后/app/main将成为您的可执行路径。WORKDIR只是指你的容器的pwd。你如何让docker文件忽略一个包,因为我总是试图获取一个包,实际上它只是我导入到golang代码中的一个文件夹,如果我使用RUN go get github.com/folderName,我仍然会得到错误,因为它不在github上,而只是一个文件夹。感谢“找不到包github.com/rn1hd/todo/models”。但是在我的代码中,我刚刚导入了那个文件夹,因为它包含了我的一些.go文件,谢谢