2017-02-26 5 views
0

私はGoogleのクラウドSQLテストするためGolangにコードの一部を書いた:私は上記のコードをテストしてみたGoogle Cloud SQLに接続する理由はDockerコンテナ内で失敗しましたが、Dockerコンテナ外では成功しましたか?

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") 
} 

を、出力はその後、私がテストしたいのMySQLのping成功

ですこの次ドッカーコンテナ、Dockerfile内部機能:ドッカーイメージを構築した後

​​

を、コンテナを実行して、私が得ました次の出力: MySQLのpingが失敗しました:エラー1045:アクセスが(パスワード使用:YES)、「user'@'my.local.ip.address「ユーザーのために拒否された

を私はすでに私の地元のことを設定しましたIPはGoogle Cloud SQLにアクセスできます。私はDockerコンテナ内で動作しないが、Dockerコンテナの外で動作する理由はわかりません。

アップデート、私は、主な違いは、Dockerfileに引用符を削除することです

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"] 

ためDockerfileエラーの問題を修正しました:CMDパラメーター、あなたは引用符を必要としながら、端末からプログラムを実行すると、になります。

答えて

0

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\""] 

CMDENTRYPOINTを試してみて、私は理由Dockerfileエラー

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"] 

の問題を修正しました

+0

同じアクセスが拒否されました。 – pengdu

+0

私はコードを更新しました - これは完全なドッカーファイルです – vodolaz095

+0

あなたが提案したのとまったく同じDockerファイルを使用しましたが、私はまだ同じアクセスが拒否されました。 Dockerコンテナがgoogle-cloud-sqlを認証するために特別なものがあると思っています。 – pengdu

0

異なるコマンドです主な違いは、引用符を削除することです Dockerfile:CMDパラメータに、の引用が必要ですターミナルからプログラムを実行すると、とマークされます。

関連する問題