Go App работает, но в Docker - неожиданный конец ввода JSON - PullRequest
0 голосов
/ 07 сентября 2018

У меня есть следующий контроллер, который выполняет внешний вызов API, используя встроенную в Go оболочку. Проблема в том, что если я запускаю свой сервер без докера, конечная точка возвращает действительные данные. Однако, как только я запускаю его из докера, я получаю ошибку unexpected end of JSON input.

home.go

package controllers

import (
  "fmt"
  "encoding/json"

  "net/http"
  "time"
  "strconv"

  cmc "github.com/coincircle/go-coinmarketcap"
)

type HomeController struct{}

func NewHomeController() *HomeController {
  return &HomeController{}
}

func (hc HomeController) IndexEndpoint(w http.ResponseWriter, r *http.Request) {
  threeMonths := int64(60 * 60 * 24 * 90)
  now := time.Now()
  secs := now.Unix()
  start := secs - threeMonths
  end := secs

  fmt.Println("Time is " + strconv.FormatInt(end, 10))

  graph, _ := cmc.TickerGraph(&cmc.TickerGraphOptions{
    Start: start,
    End: end,
    Symbol: "ETH",
  })

  fmt.Println(graph)

  w.Header().Set("Access-Control-Allow-Origin", "*")
  w.Header().Set("Content-Type", "application/json")
  w.WriteHeader(http.StatusCreated)

  json.NewEncoder(w).Encode(graph)
}

Вот моя настройка докера:

Dockerfile

FROM golang:latest AS builder

COPY . $GOPATH/src/github.com/gohuygo/cryptodemo-api
WORKDIR $GOPATH/src/github.com/gohuygo/cryptodemo-api

RUN go get ./

RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix nocgo -o /app .

FROM scratch
COPY --from=builder /app ./
ENTRYPOINT ["./app"]

Почему он жалуется на плохого json, когда задействован докер (т.е. как я могу это исправить)?

Спасибо

1 Ответ

0 голосов
/ 07 сентября 2018

Возможно, ваше приложение go пытается установить исходящие HTTPS-соединения, но контейнер scratch не содержит сертификатов CA, необходимых для проверки сертификатов TLS.

В этом случае рассмотрите возможность использования centurylink/ca-certs вместо scratch. Он включает сертификаты CA, и ваша программа должна использовать их автоматически.

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