我在Mac上安装了Mysql Community Server,它已设置并且正在运行,我可以使用Navicat for MySQL在localhost:3306上连接到它。但是,每当我尝试从使用docker-compose运行的go应用程序连接到数据库时,都会出现以下错误:
dial tcp 127.0.0.1:3306: connect: connection refused
这是我的代码:
// dbUser, dbPassword, & dbName are all variables that definitely contain the correct values
db, err = sql.Open("mysql", dbUser+":"+dbPassword+"@tcp(localhost:3306)/"+dbName)
if err != nil {
panic(err.Error())
}
defer db.Close()
query, err := db.Query("INSERT INTO test_table(test_field) VALUES(This is a test)")
if err != nil {
panic(err.Error())
}
defer query.Close()
我正在导入:
"database/sql"
_ "github.com/go-sql-driver/mysql"
任何帮助将不胜感激,谢谢。
最佳答案
您无法从Docker连接到localhost
(尤其是在Mac,其中Docker在表面下的Linux VM中运行),并且无法访问主机提供的服务。
但是,具有使用特殊主机名docker.for.mac.localhost
通过IP地址访问主机的功能。缺少任何其他Docker网络问题,修改您的连接字符串以使用docker.for.mac.localhost:3306
应该可以解决此问题并允许访问主机上的服务。
(有关此替代方法的更多详细信息,请参见Docker docs。)