I am new to golang, docker and mysql. I am trying to connect to mysql running in docker locally on my macos using golang.
Here is the code:
`package main
import (
    "context"
    "database/sql"
    _ "github.com/go-sql-driver/mysql"
    "log"
    "time"
)
func dbConn() *sql.DB {
    db, err := sql.Open("mysql", "root:Abc123$#@tcp(172.17.0.2:3306)/test")
    if err != nil {
        log.Printf("Error %s when opening DB connection\n", err)
        return nil
    }
    db.SetMaxOpenConns(10)
    db.SetMaxIdleConns(10)
    db.SetConnMaxLifetime(time.Minute * 2)
    ctx, cancelfunc := context.WithTimeout(context.Background(), time.Second)
    defer cancelfunc()
    err = db.PingContext(ctx)
    if err != nil {
        log.Printf("Error %s pinging DB", err)
        return db
    }
    log.Print("Connected to the DB successfully\n")
    defer func() {
        err := db.Close()
        if err != nil {
            log.Print(err)
        }
    }()
    return db
}
func main() {
    db := dbConn()
    defer db.Close()
}`
I am running docker with the following command:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=abcd1234 -p 3306:3306 -d mysql:8.0.30
I get the following error:
Error dial tcp 172.17.0.2:3306: i/o timeout pinging DB
docker is running locally. I created a test-db with command-line:
`mysql> create database test_db;`
and then did a
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test_db            |
+--------------------+
6 rows in set (0.00 sec)
Please help me understand my mistake here? Or what am I missing?
 
    