我刚刚更换了一台新的公司电脑(macos),下载了项目,现在我试图连接到mysql docker映像,但我总是得到
拨打tcp 127.0.0.1:3306:连接:连接被拒绝
在我的旧电脑里一切正常,但现在我有这个问题。
我的docker撰写(不显示所有内容):
version: "3"
services:
mysql:
image: mysql:5.6
ports:
- "3306:3306"
volumes:
- mysql-data:/var/lib/mysql
- ./docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d
environment:
MYSQL_ROOT_PASSWORD: a
LANG: C.UTF-8
adminer:
image: adminer
ports:
- 8082:8080
nginx:
build: ../docker-shared/nginx
ports:
- 443:443
volumes:
- "./nginx_proxy_settings.conf:/etc/nginx/conf.d/nginx_proxy_settings.conf"
volumes:
mysql-data:
所以如果我做一个 docker-compose up
一切正常,您可以签入管理员正在处理数据的下一个图像:
这是我连接mysql的golang代码:
func main() {
dbConfig := mysql.NewConfig()
dbConfig.User = "root"
dbConfig.Passwd = "a"
dbConfig.Addr = "mysql"
dbConfig.DBName = "company_prod"
db, err := sql.Open("mysql", dbConfig.FormatDSN())
if err != nil {
panic(err)
}
defer db.Close()
}
你知道我做错了什么吗??
谢谢您
1条答案
按热度按时间hmtdttj41#
问题是您的go代码无法解决
mysql
地址,因为它没有部署在compose文件中。要解决这个问题,有两种解决方案:
将你的应用程序添加到docker compose文件中,如果你的代码还没有完成,那么它应该能够连接到你的mysql容器。
公开mysql容器的端口并更改go代码中使用的地址
mysql
至localhost:3306
(我看到您编辑了compose,端口也暴露了,所以您只需要更改代码中的地址)对于第一个解决方案,您可以将一个简单的go应用程序构建到docker映像中,如下所示:
然后将其添加到撰写文件:
并将端口和传输添加到应用程序的代码中:
第二个解决方案是,如果您不想将应用程序停靠,只需将代码更改为: