mysql - 无法连接到我的 mac 上运行的 mysql

标签 mysql docker go

我正在使用 golang 应用程序,封装在一个 docker 容器中以连接到在我的本地主机(而非容器)上运行的 mysql 数据库。她是我试过的: Docker文件

FROM artifactory.cloud.com//golang:1.10-alpine3.7

RUN mkdir -p /go/src/github.kdc.mafsafdfsacys.com/perfGo/
WORKDIR /go/src/github.kdc.mafsafdfsacys.com/perfGo
COPY ./ $WORKDIR
RUN apk update && apk upgrade
RUN go build

RUN chmod +x ./entrypoint.sh
RUN ls
RUN chmod +x ./perfGo
ENTRYPOINT ["./entrypoint.sh"]

perfGo.go

package main

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

func main() {
    db, err := sql.Open("mysql", "root:@tcp(localhost:3306)/testdb")
    checkErr(err)
    _,dbErr := db.Exec("USE testdb")
    if err != nil {
        panic(dbErr)
    }

    // insert
    _, inErr := db.Query("INSERT INTO books VALUES('rewyrewryewwrewyt','dsfdsfs','fdsfasaf','55')")

    defer db.Close()
    // if there is an error inserting, handle it
    if inErr != nil {
        panic(inErr.Error())
    }

}

func checkErr(err error) {
    if err != nil {
        panic(err)
    }
}

入口点.sh

!/usr/bin/env 庆典

./perfGo

我用来构建的命令是

docker build .

用于运行容器的命令: docker run -p 3306:3306 -ti

我看到的错误是

panic: dial tcp 127.0.0.1:3306: connect: connection refused

goroutine 1 [running]:
main.main()
    /go/src/github.kdc.capitalone.com/midnight-tokens/perfGo/perf.go:22 +0x1d4

如果我在没有容器的情况下运行二进制文件,它在我的 mac 上运行得很好,但是当我尝试将它作为 docker 容器的一部分运行时,它无法连接

最佳答案

如果应用运行在容器中,而数据库在宿主机上,那么数据库从容器中获取的地址显然不是localhost(即容器的loopback设备) .

如果您使用的是 Docker For Mac,那么您可以使用:

“docker.for.mac.localhost:3306” 代替 “localhost:3306”

关于mysql - 无法连接到我的 mac 上运行的 mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51411724/

相关文章:

Go 无法从字符串创建全局字节 slice

regex - 将特定的返回查询转换为 mgo

php - 限制搜索结果中字段值的数量

MySQL - 使用聚合函数加速查询的索引

docker - 在 docker run 命令中更改 ulimit 值

docker - 在多阶段构建中使用容器时,Docker 是否执行入口点?

json - golang gin gonic 内容类型未使用 c.JSON 设置为 application/json

MySQL CASE WHEN 混合 [compare_value] 和 [condition] 在 WHEN block 中不起作用

php - microtime() 和浮点运算

docker - 具有Docker-compose的MySQL数据库的默认书写位置