我正在try 从我本地的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)
    }
}

docker command

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

error message

try 使用本地主机时:3306

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

在try 使用DB01时

dial tcp: lookup db01: no such host

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

我必须创建docker-compose.yml文件吗? 我现在想在没有它的情况下连接.

谢谢.

推荐答案

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

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

这将在本地主机3306上发布容器的端口3306.然后你就可以连接到它了.

或者,您可以使用docker inspect <containerId>获取运行的容器的IP地址,并连接到该地址:3306.

Mysql相关问答推荐

MySQL 8.0.34-从后端系统管理AWS RDS上的持久连接内存使用

如果我有USER列,如何将SQL CREATE TABLE与PostgreSQL和MySQL一起使用?

如何防止程序中计数器出错

使用NOT EXISTS()时出现MySQL查询错误

WordPress的sql命令从帖子中删除随机文本

条件触发mysql

MySQL 在第一个匹配行后停止搜索 N 行(不是 LIMIT)

在 SQL 中的 case 语句之后将新列转换为 INT

MySQL 中的 LATERAL 语法 - 是否只是说左表首先执行以便下一个可以引用它?

Golang Gorm:相同的查询构造不同,抛出不同的结果

巨大的未分区 MySQL 表问题

MySQL如何通过外键ID Select 多行?

限制正则​​表达式中多字符通配符的范围

Select 多列但仅按 1 列分组

即使我的约束是正确的,如何解决 errno: 150 外键约束形成错误?

如何过滤表格,以便它显示最新的数据?

是否可以在内部连接期间重命名连接列?

一次查询 MySQL 插入多行

MySQL 实用程序 - ~/.my.cnf 选项文件

获取最后一组不同的记录