Я разработал приложение Golang в Windows 10. На моем локальном компьютере оно работает нормально.Я удаляю исходный код на удаленный сервер CentOS, на котором есть Docker.Прямо сейчас я пытаюсь запустить это приложение в Docker.
Я создал Dockerfile в той же папке, где находится main.go файл.
- questionnaire
- database
- routes
- utils
- models
- controllers
main.go
Dockerfile
Dockerfile выглядит примерно так:
FROM golang:1.12
RUN go get github.com/gorilla/mux && \
go get github.com/gorilla/handlers && \
go get github.com/lib/pq && \
go get github.com/joho/godotenv && \
go get github.com/jinzhu/gorm && \
go get github.com/go-goracle/goracle
COPY / ./
EXPOSE 8000
CMD ["go", "run", "main.go"]
Мой main.go файл выглядит довольно просто:
package main
import (
"github.com/gorilla/handlers"
"github.com/gorilla/mux"
"github.com/joho/godotenv"
"log"
"net/http"
"questionnaire/database"
"questionnaire/routes"
"questionnaire/utils"
)
func main() {
err := godotenv.Load(".env")
if err != nil {
panic(err)
}
database.ConnectOracle()
defer database.DisconnectOracle()
router := mux.NewRouter()
headers := handlers.AllowedHeaders([]string{"X-Requested-With", "Content-Type", "Authorization"})
methods := handlers.AllowedMethods([]string{"GET", "POST", "PATCH", "PUT", "DELETE", "OPTIONS"})
origins := handlers.AllowedOrigins([]string{"*"})
router.StrictSlash(true)
routes.Handle(router)
port := utils.CheckEnvironmentVariable("APPLICATION_PORT")
log.Printf("RESTful web service is running on %s port.", port)
log.Fatal(http.ListenAndServe(":" + port, handlers.CORS(headers, methods, origins)(router)))
}
Я успешно создалОбраз Docker, но у меня есть ошибка при создании контейнера Docker:
main.go:9:2: cannot find package "questionnaire/database" in any of:
/usr/local/go/src/questionnaire/database (from $GOROOT)
/go/src/questionnaire/database (from $GOPATH)
main.go:10:2: cannot find package "questionnaire/routes" in any of:
/usr/local/go/src/questionnaire/routes (from $GOROOT)
/go/src/questionnaire/routes (from $GOPATH)
main.go:11:2: cannot find package "questionnaire/utils" in any of:
/usr/local/go/src/questionnaire/utils (from $GOROOT)
/go/src/questionnaire/utils (from $GOPATH)
Кто-нибудь может сказать, как решить эту проблему?
Я также пытался собрать двоичный файл приложения golang в Docker следующим Dockerfile, носообщение об ошибке было то же RUN go build
команда:
FROM golang:1.12
RUN go get github.com/gorilla/mux && \
go get github.com/gorilla/handlers && \
go get github.com/lib/pq && \
go get github.com/joho/godotenv && \
go get github.com/jinzhu/gorm && \
go get gopkg.in/goracle.v2
ADD . /go/src/questionnaire
WORKDIR /go/src/questionnaire
RUN go build -o /bin questionnaire
ENV PORT=8000
CMD ["/bin"]