Проблемы с получением JSON при развертывании Docker с помощью конечной точки AWS EC2 Golang GO - PullRequest
0 голосов
/ 11 января 2019

У меня проблемы с GET-запросом к конечной точке / biz в AWS с файлом Docker. Я сделал следующий проект на основе этого курса и хотел бы услышать ваше мнение.

Я выполнил все следующие команды в терминале

docker build -t projectname
docker tag projectname username/projectname
docker push username/projectname
ssh -i ~/.ssh/projectAWS.pem ec2-user@[public-DNS

Внутренний терминал AWS EC2

sudo yum update -y
sudo yum install -y dockersudo service docker start
sudo usermod -a -G docker ec2-user
docker run -d -p 80:80 usernam/projectname

Когда я нажимаю на свой общедоступный IPv4-адрес http://xxx.xxx.xxx/biz, ничего не возвращается, кроме «Этот сайт недоступен». Он работает на localhost: 80 / biz, когда Docker запускается локально. Ты думаешь, что-то мне не хватает? Нравится Dockerfile? Отсутствует импорт? Настройка AWS? Endpoints? или сам main.go? Заранее спасибо!

# Dockerfile from Docker
# Start from a Debian image with the latest version of Go installed
# and a workspace (GOPATH) configured at /go.
FROM golang

# Copy the local package files to the container's workspace.
ADD . /go/src/github.com/seintun/dinesty.ninja-backend
WORKDIR /go/src/github.com/seintun/dinesty.ninja-backend

# Build the outyet command inside the container.
RUN go get ./
RUN go build

# Run the outyet command by default when the container starts.
ENTRYPOINT /go/bin/dinesty.ninja-backend

# Document that the service listens on port 8080.
EXPOSE 8080

package main

import (
  "log"
  "net/http"
  "os"

  "github.com/gorilla/handlers"
  "github.com/gorilla/mux"
  ctrl "github.com/username/projectname/controllers"
)

func main() {
    r := mux.NewRouter()
    r.HandleFunc("/biz", ctrl.FetchBiz).Methods("GET")
rLog := handlers.LoggingHandler(os.Stdout, r)
	if err := http.ListenAndServe(":8080", rLog); err != nil {
		log.Fatal(err)
	}
}

// Если вам интересно, что делает ctrl.FetchBiz, он просто получает JSON из mongoDB пакет ctrl

import (
  "encoding/json"
  "io/ioutil"
  "log"
  "net/http"

  . "github.com/username/projectname/models"
  "gopkg.in/mgo.v2/bson"

  mgo "gopkg.in/mgo.v2"
)

// FetchBiz return list of bizs
func (b *BizDAO) FetchBiz() ([]Biz, error) {
    query := bson.M{"active": true}
    var bizs []Biz
    err := db.C(BCOLLECTION).Find(query).All(&bizs)
    return bizs, err
}

1 Ответ

0 голосов
/ 11 января 2019

Ваш веб-сервер обслуживает порт 8080 if err := http.ListenAndServe(":8080", rLog); err != nil {, пока вы открываете доступ к порту 80 docker run -d -p 80:80 usernam/projectname

Когда вы используете docker run -d -p 80:8080 usernam/projectname, ваш веб-сервис должен быть доступен через порт 80 вашего хоста.

...