Как пробросить порт докер контейнера на локаль?
Создаю вот такой контейнер
FROM ubuntu:18.04
WORKDIR "/srv"
COPY --chown=1000 build /srv/bin
EXPOSE 8080
USER 1000
CMD ["/srv/bin/service"]
/srv/bin/service работает на порту 8080 и изнутри контейнера прекрасно запускается через этот порт. Но пробросить на локальную машину этот же порт не могу. Запускаю вот так: docker run --rm --name container-name -p 8080:8080 image захожу на http://localhost:8080/ и у меня ошибка доступа
Ответы (1 шт):
Автор решения: Malcev Pavel
→ Ссылка
Проблема оказалась в самом сервисе собранном на голенге, а именно в следующем коде.
router := chi.NewRouter()
router.Get("/", func(writer gohttp.ResponseWriter, request *gohttp.Request) {
writer.Write([]byte("Hello World!"))
})
httpServer := &http.Server{
Handler: router,
ReadHeaderTimeout: 10 * time.Second,
Addr: "localhost:8080",
}
if err := httpServer.ListenAndServe(); err != nil {
zap.L().Fatal("listen", zap.Error(err))
}
После рефакторинга кода все заработало
router := chi.NewRouter()
router.Get("/", func(writer gohttp.ResponseWriter, request *gohttp.Request) {
writer.Write([]byte("Hello World!"))
})
if err := http.ListenAndServe(":8080", router); err != nil {
zap.L().Fatal("listen", zap.Error(err))
}
Буду признателен если кто то пояснит почему так происходит.