与go&mysql&docker的连接被拒绝

uqjltbpv  于 2022-12-31  发布在  Go
关注(0)|答案(1)|浏览(158)

我正在尝试从我的本地Go文件连接在Docker上创建的mysqlDB。

主服务器。开始
package main

import (
    "database/sql"
    "fmt"

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

func main() {
    fmt.Println("Hello")
    // All following 4 codes won't connect to the database.
        // "db01" is docker container name. "test" is db name.
    // db, err := sql.Open("mysql", "root:password@tcp(localhost:3306)/test")
    // db, err := sql.Open("mysql", "root:password@tcp(localhost)/test")
    // db, err := sql.Open("mysql", "root:password@tcp(db01)/test")
    db, err := sql.Open("mysql", "root:password@tcp(db01:3306)/test")

    if err != nil {
        fmt.Println(err)
    }
    defer db.Close()
    fmt.Println(db)
    err = db.Ping()
    if err != nil {
        fmt.Println(err)
    }
}
停靠命令
docker run --name db01 -dit -e MYSQL_ROOT_PASSWORD=password mysql:latest
错误消息

尝试使用本地主机时:3306

dial tcp [::1]:3306: connect: connection refused

尝试使用db 01时,

dial tcp: lookup db01: no such host

mysql数据库是在docker容器上创建的,没有任何问题,所以我认为go文件和docker容器之间的连接不太顺利。
我必须创建docker-compose.yml文件吗?我现在不想连接它。
谢谢你。

14ifxucb

14ifxucb1#

您创建了一个Docker容器并在其中运行MySQL。该容器将拥有自己的网络地址。您可以通过运行以下命令在本地主机上发布该容器的端口:

docker run --name db01 -p 3306:3306 -dit -e MYSQL_ROOT_PASSWORD=password mysql:latest

这将在localhost:3306上发布容器的端口3306,然后您可以连接到它。
或者,您可以使用docker inspect <containerId>获取正在运行的容器的IP地址,并连接到该地址:3306。

相关问题