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

时间:2018-11-28 09:42:16

标签: docker go

我有一个使用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页。我的另一个问题是,码头工人只能在容器上运行静态页面吗?因为我的网站可以接收和发送数据。谢谢

this is my docker file(./ todo是我的项目名称和文件夹名称)

this is my terminal(如您所见,容器将立即退出)

3 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

这是我为我的GOlang网络应用使用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-app:latest .

最后,启动我的网络应用

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

希望这项帮助

答案 2 :(得分:0)

  1. 您不需要Nginx即可在Go中运行服务器
  2. 最好在Dockerfile中构建二进制文件

这是您的Dockerfile的样子:

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