amazon-web-services - 使用 AWS EC2 Golang GO 端点在 Docker 部署上获取 JSON 时出现问题

标签 amazon-web-services docker go amazon-ec2

我在使用 Docker 文件向 AWS 上的/biz 端点发出 GET 请求时遇到困难。我根据本类(class)制作了以下项目,很想听听您的见解。

我在终端中运行了以下所有命令

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 公共(public) IP http://xxx.xxx.xxx/biz 时,除了“无法访问此站点”之外没有任何返回。当 docker 在本地运行时,它在 localhost:80/biz 上工作。你认为我缺少什么吗?喜欢 Dockerfile 吗?缺少进口? AWS 设置?端点?还是 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 做了什么,它只是从 mongoDB 获取 JSON 包控制

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
}

最佳答案

您的网络服务器服务于端口 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 上访问。

关于amazon-web-services - 使用 AWS EC2 Golang GO 端点在 Docker 部署上获取 JSON 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54145007/

相关文章:

linux - 如何将文件从 Linux 实例正确复制到 aws ec2 实例?

docker - Docker Containers 和 Swarm 的有效监控解决方案?

database - go rest api 服务器设计良好实践

go - 如何在 Go 中生成 Youtube ID?

struct - 如何从函数访问结构的实例字段?

amazon-web-services - 上传 CodeBuild 工件*如果*它们存在

amazon-web-services - 如果我们可以使用 Instance Property 直接将 EIP 关联到实例,那么还需要 EIAssociation 资源吗?

python - Boto3 Copy_Object 大小失败 > 5GB

docker - 在删除Openshift应用程序的资源之前,应该缩小其规模吗?

docker 以 "failed to retrieve runc version: fork/exec/usr/bin/runc: exec format error"开头