猿问

如何在 Docker 容器上运行 golang web 应用程序

我有一个使用 go 语言作为后端的网络应用程序。当我运行我的网站时,我只是这样做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 是否只能在容器上运行静态页面?因为我的站点可以接收和发送数据。谢谢

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

这是我的终端(你可以看到容器立即退出)


幕布斯7119047
浏览 137回答 3
3回答

有只小跳蛙

这是我为我的 Golang 网络应用程序使用框架所做的Gin-gonic- 我的 Dockerfile:FROM golang:latest# AuthorMAINTAINER dangminhtruong# Create working folderRUN mkdir /appCOPY . /appRUN apt -y update && apt -y install gitRUN go get github.com/go-sql-driver/mysqlRUN go get github.com/gosimple/slugRUN go get github.com/gin-gonic/ginRUN go get gopkg.in/russross/blackfriday.v2RUN go get github.com/gin-gonic/contrib/sessionsWORKDIR /app 然后构建docker镜像docker build -t web-app:latest .最后,启动我的网络应用程序docker run -it -p 80:8080 -d web-app:latest go run main.go //My webapp start at 8080 port希望这有帮助

qq_笑_17

我猜你没有在容器外暴露 Docker 端口。这就是为什么您看不到任何输出而不仅仅是特定于 GO 程序的原因。尝试将以下行添加到您的 docker compose 文件中EXPOSE 80(whichever port you want it to be)EXPOSE 443EXPOSE 3306这将使容器可以从外部访问

12345678_0001

你不需要 Nginx 在 Go 中运行服务器最好在 Dockerfile 中构建一个二进制文件您的 Dockerfile 可能如下所示:FROM golang:latest RUN mkdir /app ADD . /app/ WORKDIR /app RUN go build -o main .EXPOSE 8000CMD ["/app/main"]
随时随地看视频慕课网APP

相关分类

Go
我要回答