Как запустить веб-приложение golang в контейнере Docker

У меня есть веб-приложение, которое использует язык 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 не найдена. Другой вопрос: может ли докер запускать только статические страницы в контейнере? потому что мой сайт может получать и отправлять данные. Спасибо

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

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

Самый простой способ запустить веб-приложение golang в контейнере - это начать с официального образа golang, найденного здесь: hub.docker.com/_/golang/, и следовать инструкциям раздела «Запуск экземпляра Go в вашем приложении».

tgogos 28.11.2018 10:51

Вы можете попробовать получить доступ к порту локального хоста из контейнера Docker. как указано здесь

Prashanth 28.11.2018 12:09
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
2
2 656
3

Ответы 3

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

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

Это обеспечит доступ к контейнеру извне.

зачем трое выставлять? первый - это порт, на котором работает мое веб-приложение?

009820 29.11.2018 04:07
  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"]

что такое команда CMD, мне делать CMD ["main.go"]? и я запутался с WORKDIR, какой каталог выбрать? Благодарность

009820 10.12.2018 08:50

CMD сообщает, что будет выполнено при запуске контейнера. Вам не нужно запускать main.go, вам нужно сначала его собрать (RUN go build -o main.), А затем / app / main будет вашим исполняемым путем. WORKDIR просто означает pwd вашего контейнера.

Alex Pliutau 10.12.2018 11:11

Как заставить файл докеров игнорировать пакет, потому что мой всегда пытается получить пакет, который на самом деле является просто папкой, которую я импортировал в свой код golang, если я использую RUN go get github.com/folderName, я все равно получу сообщение об ошибке потому что это не на github, а просто папка. Спасибо

009820 11.12.2018 04:29

"не могу найти пакет github.com/rn1hd/todo/models". Но в моем коде я только что импортировал эту папку, потому что она содержит некоторые из моих файлов .go, спасибо

009820 11.12.2018 04:45

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

Надеюсь, это полезно

ваше веб-приложение работает отдельно или внутри контейнера? потому что мой контейнер вышел сразу после его запуска, но веб-приложение работает из-за команды // go build; название проекта. Итак, я предполагаю, что мое веб-приложение работает само по себе, а не внутри контейнера.

009820 03.12.2018 09:11

Мое веб-приложение работает внутри контейнера. Вы немедленно остановите контейнер, я поставлю для него точку входа. Можете ли вы сейчас показать свой dockerfile?

Truong Dang 03.12.2018 09:20
docker ps -a затем скопируйте идентификатор имени контейнера докеров, который завершился. Затем проверьте подробности журналов контейнера. docker logs --details your_container_name может оказаться полезным.
Truong Dang 03.12.2018 10:46

Другие вопросы по теме