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.
Immer noch der gleiche Zugriff verweigert. – pengdu
ich aktualisierte Code - so ist es komplett dockerfile – vodolaz095
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