2017-02-26 5 views
0

ich ein Stück Code in Golang geschrieben haben, zu testen:Warum eine Verbindung zu Google Cloud SQL innerhalb des Docker-Containers fehlgeschlagen ist, aber Erfolg außerhalb des Docker-Containers? Google Cloud SQL

package main 

import (
    "database/sql" 
    "flag" 
    "fmt" 

    _ "github.com/go-sql-driver/mysql" 
) 

var addr = flag.String("db", "", "The database address") 

func main() { 
    flag.Parse() 

    db, err := sql.Open("mysql", *addr) 
    if err != nil { 
     fmt.Println("mysql open failed: ", err) 
     return 
    } 

    defer db.Close() 

    err = db.Ping() 
    if err != nil { 
     fmt.Println("mysql ping failed: ", err) 
     return 
    } 
    fmt.Println("mysql ping success") 
} 

ich den obigen Code getestet haben, ist der Ausgang mysql ping Erfolg

Dann möchte ich testen diese Funktion innerhalb Docker Behälter, die Dockerfile folgende:

FROM golang 

ADD . $GOPATH/src/github.com/pdu/gcloud-sql-test 

RUN go install github.com/pdu/gcloud-sql-test 

ENTRYPOINT ["gcloud-sql-test"] 
CMD ["-db=\"user:[email protected](gcloud.sql.ip.address:3306)/database\""] 

Nach dem Docker Bild Aufbau und die Behälter laufen, ich habe die folgende Ausgabe: mysql ping fehlgeschlagen: Fehler 1045: Zugriff verweigert für User ‚" user'@'my.local.ip.address' (Kennwort: JA)

ich bereits, dass meine lokalen konfiguriert haben IP kann auf Google Cloud SQL zugreifen. Ich weiß nicht, warum es nicht im Docker-Container funktioniert, aber außerhalb des Docker-Containers funktioniert.

Updates habe ich das Problem behoben wegen Dockerfile Fehler

FROM golang 

ADD . $GOPATH/src/github.com/pdu/gcloud-sql-test 

RUN go install github.com/pdu/gcloud-sql-test 

CMD ["gcloud-sql-test", "-db=user:[email protected](gcloud.sql.ip.address:3306)/database"] 

Der wichtigste Unterschied ist die Anführungszeichen im Dockerfile zu entfernen: CMD-Parameter, während Sie die Anführungszeichen brauchen, wenn Sie das Programm von Terminal ausführen.

Antwort

0

Versuchen

FROM golang 

ADD . $GOPATH/src/github.com/pdu/gcloud-sql-test 

RUN go install github.com/pdu/gcloud-sql-test 

CMD ["gcloud-sql-test","-db=\"user:[email protected](gcloud.sql.ip.address:3306)/database\""] 

CMD und ENTRYPOINT verschiedene Befehle sind

+0

Immer noch der gleiche Zugriff verweigert. – pengdu

+0

ich aktualisierte Code - so ist es komplett dockerfile – vodolaz095

+0

Ich habe gerade die gleiche Dockerfile wie Sie vorgeschlagen, ich habe immer noch den gleichen Zugriff verweigert. Ich denke, wenn es etwas besonderes für Docker Container gibt, Google-Cloud-SQL zu authentifizieren. – pengdu

0

ich wegen Dockerfile Fehler das Problem behoben haben

FROM golang 

ADD . $GOPATH/src/github.com/pdu/gcloud-sql-test 

RUN go install github.com/pdu/gcloud-sql-test 

CMD ["gcloud-sql-test", "-db=user:[email protected](gcloud.sql.ip.address:3306)/database"] 

Der Hauptunterschied die Anführungszeichen zu entfernen ist im Dockerfile: CMD-Parameter, während Sie das Zitat benötigen Markieren Sie, wenn Sie das Programm von Terminal ausführen.

Verwandte Themen