如何在Docker容器上运行Golang Web应用

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

  FROM nginx:latest 

WORKDIR static / html /

COPY。 / usr / src / app
</ code> </ pre>

然后使用Dockerfile制作了一个映像,但是当我在容器上运行它并转到localhost:myPort / static / html / page.html它说找不到404页面。 我的另一个问题是,码头工人只能在容器上运行静态页面吗? 因为我的网站可以接收和发送数据。 谢谢</ p>

这是我的docker文件( ./todo是我的项目名称和文件夹名称)</ p>

这是我的终端机(如您所见,容器将立即退出)</ p>
</ div>

展开原文

原文

I have a web app that uses go language as it's back end. When I run my website I just do go build; ./projectName then it will run on local server port 8000. How do I run this web app on a container? I can run sample images like nginx on a container, but how do I create my own images for my projects. I created a Dockerfile inside my project folder with the following codes:

FROM nginx:latest

WORKDIR static/html/

COPY . /usr/src/app

Then made an image using the Dockerfile, but when I run it on a container and go to localhost:myPort/static/html/page.html it says 404 page not found. My other question is, does docker can only run static pages on a container? cause my site can receive and send data. Thanks

this is my docker file (./todo is my project name and folder name)

this is my terminal ( as you can see the the container exits emmediately)

dsp15140275697
dsp15140275697 您可以尝试从Docker容器中访问localhost的端口。正如这里指出的
接近 2 年之前 回复
dongquming3255
dongquming3255 在容器中运行golangWeb应用程序的最简单方法是从此处找到的官方golang映像开始:hub.docker.com/_/golang/并按照“在应用程序中启动Go实例”部分的说明进行操作。
接近 2 年之前 回复

3个回答



我想您没有将Docker Port暴露在容器外部。
这就是为什么您看不到任何输出而不仅仅是看到的原因
尝试将以下行添加到docker compose文件中</ p>

  EXPOSE 80(无论您希望使用哪个端口)
EXPOSE 443
EXPOSE 3306
< / code> </ pre>

这将使您可以从外部访问该容器</ p>
</ div>

展开原文

原文

I guess you are not exposing the Docker Port outside the container. That's why you are not able to see any output rather than just being specific to GO Program. Try adding the below lines to your docker compose File

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

This will make the container be accessed from outside

drpmazn9021
drpmazn9021 为什么三个暴露? 第一个是运行我的Web应用程序的端口?
接近 2 年之前 回复

Here is what i did for my GOlang web app use Gin-gonic framework - my 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 

Then build docker image

docker build -t web-app:latest .

Finally, start my web-app

docker run -it -p 80:8080 -d web-app:latest go run main.go //My webapp start at 8080 port

Hope this helpfull

dsxrq28228
dsxrq28228 docker ps -a然后复制退出的docker容器名称ID。 然后检查容器日志详细信息docker日志--details your_container_name可能有帮助
接近 2 年之前 回复
dongzhang1839
dongzhang1839 我编辑了问题,添加了docker文件。
接近 2 年之前 回复
dqu94359
dqu94359 我的Web应用程序在容器中运行。 您的容器立即停止在您设置的入口点。 您现在可以显示您的dockerfile吗?
接近 2 年之前 回复
duanbushi1479
duanbushi1479 您的Web应用程序是单独运行还是在容器中运行? 导致我的容器在运行后立即退出,但是Web应用程序启动了// go build命令; 项目名。 所以我想我的Web应用程序是自己运行的,而不是在容器内运行的
接近 2 年之前 回复




  1. 您不需要Nginx在Go中运行服务器</ li>
  2. 在Dockerfile中构建二进制文件</ li>
    </ ol>

    这是您的Dockerfile的外观:</ p>

      FROM golang:latest

    RUN mkdir / app
    ADD。 / app /
    WORKDIR / app
    RUN进行构建-o main。
    EXPOSE 8000
    CMD [“ / app / main”]
    </ code> </ pre>
    </ div>

展开原文

原文

  1. You don't need Nginx to run a server in Go
  2. It's better to build a binary in Dockerfile

Here is how your Dockerfile may look like:

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

duan88014
duan88014 “找不到包github.com/rn1hd/todo/models”。 但是在我的代码上,我刚刚导入了该文件夹,因为它包含一些我的.go文件,谢谢
接近 2 年之前 回复
douhuang5623
douhuang5623 您如何使docker文件忽略软件包,因为我总是尝试获取实际上只是我导入到golang代码中的文件夹的软件包,如果我使用RUN转到get github.com/folderName我仍然会收到错误 因为它不在github上,而只是一个文件夹。 谢谢
接近 2 年之前 回复
doushen2154
doushen2154 CMD告诉您在启动容器时将执行什么操作。 您不需要运行main.go,您需要先对其进行构建(运行go build -o main。),然后/ app / main将成为您的可执行路径。 WORKDIR仅表示您的容器的密码。
接近 2 年之前 回复
duanfoumi5620
duanfoumi5620 什么是CMD命令,我应该执行CMD [“ main.go”]吗? 我对WORKDIR感到困惑,应该选择哪个目录? 谢谢
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐