我用Golang编写了一段代码来测试:
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成功
然后我想在Docker容器中测试这个函数,Dockerfile如下所示:
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:passwd@tcp(gcloud.sql.ip.address:3306)/database\""]在构建了Docker映像并运行容器之后,我得到了以下输出: mysql ping失败:错误1045:拒绝用户“user”@my.local.ip.Address‘(使用密码: YES)的访问。
我已经配置了本地IP可以访问Google。我不知道为什么它不在码头集装箱内工作,而是在码头集装箱外工作。
更新,我已经修复了这个问题,因为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:passwd@tcp(gcloud.sql.ip.address:3306)/database"]主要区别是删除Dockerfile:CMD参数中的引号,而在从终端执行程序时需要引号。
发布于 2017-02-26 09:41:52
发布于 2017-02-27 08:10:41
由于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:passwd@tcp(gcloud.sql.ip.address:3306)/database"]主要区别是删除Dockerfile:CMD参数中的引号,而在从终端执行程序时需要引号。
https://stackoverflow.com/questions/42466845
复制相似问题