首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么连接到Google在Docker容器内失败而在Docker容器外成功?

为什么连接到Google在Docker容器内失败而在Docker容器外成功?
EN

Stack Overflow用户
提问于 2017-02-26 09:33:10
回答 2查看 348关注 0票数 0

我用Golang编写了一段代码来测试:

代码语言:javascript
运行
复制
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如下所示:

代码语言:javascript
运行
复制
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错误

代码语言:javascript
运行
复制
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参数中的引号,而在从终端执行程序时需要引号。

EN

回答 2

Stack Overflow用户

发布于 2017-02-26 09:41:52

试一试

代码语言:javascript
运行
复制
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\""]

CMD入口点是不同的命令

票数 0
EN

Stack Overflow用户

发布于 2017-02-27 08:10:41

由于Dockerfile错误,我修复了这个问题

代码语言:javascript
运行
复制
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参数中的引号,而在从终端执行程序时需要引号。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42466845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档