I have this golang sandbox project: https://github.com/cflynn07/golang-db-gateway-example
When I try to run gateway/gateway.go
inside a golang:1.6.0-alpine
~/g/s/g/c/golang-db-gateway-example git:master ❯❯❯ docker-compose up gateway mysql_server is up-to-date Starting gateway Attaching to gateway gateway | gateway.go:7:2: cannot find package "github.com/go-sql-driver/mysql" in any of: gateway | /usr/local/go/src/github.com/go-sql-driver/mysql (from $GOROOT) gateway | /go/src/github.com/go-sql-driver/mysql (from $GOPATH) gateway | gateway.go:8:2: cannot find package "github.com/gorilla/mux" in any of: gateway | /usr/local/go/src/github.com/gorilla/mux (from $GOROOT) gateway | /go/src/github.com/gorilla/mux (from $GOPATH) gateway exited with code 1
Why isn't the build step detecting my project's dependencies inside the /example/vendor
folder?
When I run go run gateway/gateway.go
from my host OS, the command works.
Directory structure (mounted inside container at /example)
~/g/s/g/c/golang-db-gateway-example git:master ❯❯❯ tree -L 3 . ├── README.md ├── client │ └── client.go ├── docker-compose.yml ├── gateway │ └── gateway.go ├── glide.lock ├── glide.yaml ├── tmp └── vendor └── github.com ├── go-sql-driver └── gorilla
Relevant files:
docker-compose.yml
mysql: container_name: mysql_server image: mysql:5.7.11 environment: - MYSQL_ROOT_PASSWORD=root ports: - 3306 gateway: container_name: gateway image: golang:1.6.0-alpine volumes: - ./:/example working_dir: /example/gateway command: go run gateway.go environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=sandbox links: - mysql
gateway/gateway.go
package main import ( "database/sql" "encoding/json" "fmt" _ "github.com/go-sql-driver/mysql" "github.com/gorilla/mux" "net/http" "os" ) var db *sql.DB func main() { r := mux.NewRouter() var e error db, e = sql.Open( "mysql", os.ExpandEnv("root:${MYSQL_SERVER_PASSWORD}@mysql_server:3306/${MYSQL_DATABASE}")) fmt.Print("error is", e) r.HandleFunc("/todos", getTodos).Methods("GET") http.ListenAndServe(":8080", r) fmt.Printf("gateway") } type todo struct{} func getTodos(w http.ResponseWriter, r *http.Request) { t := new(todo) s, _ := json.Marshal(t) w.Header().Set("Content-Type", "application/json; charset=UTF-8") fmt.Fprint(w, string(s)) }
Update 1 I changed my data-volume mount path inside the container to mount the project under the containers $GOPATH
mysql: container_name: mysql_server image: mysql:5.7.11 environment: - MYSQL_ROOT_PASSWORD=root ports: - 3306 gateway: container_name: gateway image: golang:1.6.0-alpine volumes: - ./:/go/src/github.com/cflynn07/golang-db-gateway-example working_dir: /go/src/github.com/cflynn07/golang-db-gateway-example command: go run gateway/gateway.go environment: - MYSQL_ROOT_PASSWORD=root - MYSQL_DATABASE=sandbox links: - mysql
However now docker appears to hang:
~/g/s/g/c/golang-db-gateway-example git:master ❯❯❯ docker-compose up gateway ✱ mysql_server is up-to-date Recreating gateway Attaching to gateway