与 Go&MySQL&Docker 的连接被拒绝



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

main.go

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)
}
}
<<h4>码头工人命令/h4>
docker run --name db01 -dit -e MYSQL_ROOT_PASSWORD=password mysql:latest
错误消息

尝试使用localhost:3306

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

尝试使用db01

dial tcp: lookup db01: no such host

mysql数据库是在docker容器上创建的,没有任何问题,所以我认为go文件和docker容器之间的连接不太好。

我必须创建docker-compose吗?yml文件?

我现在想连接。

谢谢。

您创建了一个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。

最新更新