Я создал Go бэкэнд-сервер, который содержит API. Все работает хорошо при локальном запуске "go run server". Однако я столкнулся с проблемами при запуске его в docker. Поэтому я создал Dockerfile и запустил контейнер linux на хосте сетевого режима, но не могу получить доступ к API в браузере. Если он работает, я смогу увидеть ответ json от http://localhost: 8500 / status . Поэтому я думаю, что мне нужны разрешения или добавить флаги или больше сценариев, связанных с установкой. Я тестировал различные флаги и порты в docker, но не могу определить проблему. См. Код, файл dockerfile и команду ниже.
Примечание. Когда я запускаю программу локально на windows, появляется предупреждение безопасности, возможно, это связано с проблемой?
Я работаю docker рабочий стол сообщества v 2.2.0.5 стабильный.
Код API:
import (
"log"
"net/http"
conf "server/conf"
"github.com/gorilla/mux"
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)
var db *gorm.DB
// Middleware used to add correct permissions for all requests
func middleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Content-Type", "application/json")
w.Header().Set("Access-Control-Allow-Origin", "*")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type")
next.ServeHTTP(w, r)
})
}
func StartApi(config conf.Config, _db *gorm.DB) {
log.Println("Start Api")
db = _db
router := mux.NewRouter()
// Create
router.HandleFunc("/login", login).Methods("POST", "OPTIONS")
router.HandleFunc("/network", createNetwork).Methods("POST", "OPTIONS")
// Read
router.HandleFunc("/users/{networkName}", getUsers).Methods("GET", "OPTIONS")
router.HandleFunc("/streams/{networkName}", getStreams).Methods("GET", "OPTIONS")
router.HandleFunc("/status", showStatus).Methods("GET", "OPTIONS")
log.Println("API started at port " + config.Backend.Api_port) // api port is stored in config
log.Println(http.ListenAndServe(":"+config.Backend.Api_port, middleware(router)))
log.Println("Api done!") }
Dockerfile:
# Start from the latest golang base image
FROM golang:latest
WORKDIR /go/src/server
COPY ./src/server .
# Download packages
RUN go get .
# Compile code
#RUN go build -o server
RUN go install server
# Expose ports
EXPOSE 8500
EXPOSE 8600
#ENTRYPOINT ./server
CMD ["go", "run", "server"]
Docker -составить:
version : '3'
services:
react:
build: ./ReactFrontend/
container_name: ReactFrontend
tty: true
ports:
- 4000:3000
backend:
network_mode: host
build: ./GoBackend/
container_name: goserver
ports:
- 8500:8500
- 8600:8600
Docker команда:
docker run --net=host goserver
Любая помощь приветствуется,
Приветствия!