无法连接到mysql docker映像连接被拒绝
我刚刚更换了一台新的公司电脑(MACOS),下载了这些项目,现在我正试图连接到mysql docker映像,但我总是能找到它 拨打tcp 127.0.0.1:3306:连接:连接被拒绝 在我的旧电脑里,一切正常,但现在我解决了这个问题 My docker compose(不显示所有内容): 因此,如果我做了一个无法连接到mysql docker映像连接被拒绝,mysql,docker,go,docker-compose,Mysql,Docker,Go,Docker Compose,我刚刚更换了一台新的公司电脑(MACOS),下载了这些项目,现在我正试图连接到mysql docker映像,但我总是能找到它 拨打tcp 127.0.0.1:3306:连接:连接被拒绝 在我的旧电脑里,一切正常,但现在我解决了这个问题 My docker compose(不显示所有内容): 因此,如果我做了一个docker compose up一切正常,您可以在管理员处理数据的下一个图像中进行检查: 这是我连接mysql的Golang代码: func main() { dbCon
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()
}
你知道我做错了什么吗
谢谢问题是您的go代码无法解析
mysql
地址,因为它没有部署在compose文件中
要解决这一问题,您有两种解决方案:
mysql
更改为localhost:3306
(我看到您编辑了compose,端口也公开了,所以您只需要更改代码中的地址)# Build stage
FROM golang:alpine AS build-env
COPY . /go/src/your/project/path
WORKDIR /go/src/your/project/path
RUN apk update && \
apk upgrade && \
<install your deps here if needed>
# Install dep if needed
ENV DEP_VERSION="0.4.1"
RUN curl -L -s https://github.com/golang/dep/releases/download/v${DEP_VERSION}/dep-linux-amd64 -o $GOPATH/bin/dep
RUN chmod +x $GOPATH/bin/dep
RUN dep ensure
# Build your app
RUN go build -o myapp
# Final stage
FROM alpine
WORKDIR /app/myapp
COPY --from=build-env /go/src/your/project/path /app/myapp
ENTRYPOINT ["/app/myapp/myapp"]
并将端口和传输添加到应用程序的代码中:
func main() {
dbConfig := mysql.NewConfig()
dbConfig.User = "root"
dbConfig.Passwd = "a"
dbConfig.Addr = "mysql:3306"
dbConfig.DBName = "websays_prod"
dbConfig.Net = "tcp"
db, err := sql.Open("mysql", dbConfig.FormatDSN())
if err != nil {
panic(err)
}
defer db.Close()
}
第二个解决方案是,如果您不想将应用程序dockerize,只需将代码更改为:
func main() {
dbConfig := mysql.NewConfig()
dbConfig.User = "root"
dbConfig.Passwd = "a"
dbConfig.Addr = "localhost:3306"
dbConfig.DBName = "websays_prod"
dbConfig.Net = "tcp"
db, err := sql.Open("mysql", dbConfig.FormatDSN())
if err != nil {
panic(err)
}
defer db.Close()
}
尝试添加
dbConfig.Net=“tcp”
?端口也应该添加到地址中,因此它应该是mysql:3306
而不仅仅是mysql
首先感谢您的响应,我尝试了dbConfig.Net=“tcp”,现在我遇到了以下错误:拨打tcp:lookup mysql:没有这样的主机,向mysql添加端口不起作用:SAh,刚刚意识到你的go应用程序不在你的撰写文件中。这意味着它将无法解析mysql
。如果您不希望go应用程序位于compose文件中,则必须公开mysql容器的端口(通过添加端口:3306:3306
),并使用localhost:3306
作为go应用程序中的地址。这是什么意思?你试过我的建议了吗?
func main() {
dbConfig := mysql.NewConfig()
dbConfig.User = "root"
dbConfig.Passwd = "a"
dbConfig.Addr = "mysql:3306"
dbConfig.DBName = "websays_prod"
dbConfig.Net = "tcp"
db, err := sql.Open("mysql", dbConfig.FormatDSN())
if err != nil {
panic(err)
}
defer db.Close()
}
func main() {
dbConfig := mysql.NewConfig()
dbConfig.User = "root"
dbConfig.Passwd = "a"
dbConfig.Addr = "localhost:3306"
dbConfig.DBName = "websays_prod"
dbConfig.Net = "tcp"
db, err := sql.Open("mysql", dbConfig.FormatDSN())
if err != nil {
panic(err)
}
defer db.Close()
}