Как запустить веб-приложение golang в контейнере Docker - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть веб-приложение, которое использует язык go, так как это серверная часть.Когда я запускаю свой веб-сайт, я просто делаю go build; ./projectName, тогда он запускается на локальном сервере с портом 8000. Как мне запустить это веб-приложение в контейнере?Я могу запускать образцы изображений, такие как nginx, на контейнере, но как мне создавать свои собственные изображения для своих проектов.Я создал Dockerfile внутри папки моего проекта со следующими кодами:

FROM nginx:latest

WORKDIR static/html/

COPY . /usr/src/app

Затем сделал изображение, используя Dockerfile, но когда я запускаю его в контейнере и перехожу на localhost: myPort / static / html / page.html там написано, что страница 404 не найдена.Другой мой вопрос: может ли Docker запускать только статические страницы в контейнере?Потому что мой сайт может получать и отправлять данные.Спасибо

это мой файл Docker (./todo это имя моего проекта и имя папки)

это мой терминал (как вы можетесм. контейнер выходит сразу)

Ответы [ 3 ]

0 голосов
/ 28 ноября 2018
  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"]
0 голосов
/ 28 ноября 2018

Вот что я сделал для моего веб-приложения GOlang Gin-gonic framework - мой 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 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

Надеюсь, это поможет

0 голосов
/ 28 ноября 2018

Полагаю, вы не открываете порт докера вне контейнера.Вот почему вы не можете видеть какие-либо результаты, а не просто быть конкретным для GO Program.Попробуйте добавить следующие строки в ваш докер compose File

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

Это сделает доступ к контейнеру извне

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...