使用 golang 连接到 docker mysql

运行 docker mysql


docker run --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7


[mysql docker运行容器][1]


去代码:


包主


import (

"database/sql"


_ "github.com/go-sql-driver/mysql"

)


func main() {


db, err := sql.Open("mysql", "root:root@tcp(172.17.0.2:3306)/test-db")

if err != nil {

    panic(err)

}

defer db.Close()

err = db.ping()

if err != nil {

   log.Print(err)

}

ping 正在抛出 ETIMEDOUT 。IP 正确的是容器 IP。


泛舟湖上清波郎朗
浏览 116回答 3
3回答

慕尼黑5688855

它必须为 docker 内部 IP 公开一个端口,但是每次重新启动时都可以更改 IP。要将端口映射到本地主机,您可以使用标志-p 127.0.0.1:3306:3306要为 docker 容器指定 IP,您可以创建自己的用户定义的虚拟网络并在启动容器时在此网络上绑定 IP。docker network create --subnet=192.168.101.0/24 testdocker run -d --name db1 --network test --ip=192.168.101.10 -e MYSQL_ROOT_PASSWORD=12345 mysql:5.7mysql -h 192.168.101.10 -uroot -p12345另外,请确保 MySQL 已启动。您可以使用 检查状态docker ps并使用 记录docker logs db1。其中db1用标志指定的名称--name。

呼如林

解决方案不是在 Docker MySQL 上工作,而是在基于 Linux 的 Docker 上工作,并使用 mysql + go on it。创建了一个 Docker 镜像,它是 Ubuntu 18.04 + Mysql Server 5.7 + Golang 1.13 的组合。在Docker Hub上可用。拉取图像并使用以下命令运行它:-拉取镜像后,您可以使用以下命令启动 mysql 服务器 -/etc/init.d/mysql 启动

摇曳的蔷薇

您需要使用 docker-p端口公开 MySQL 端口,例如docker&nbsp;run&nbsp;--name&nbsp;mysql&nbsp;-e&nbsp;MYSQL_ROOT_PASSWORD=root&nbsp;-p&nbsp;33060:3306&nbsp;-d&nbsp;mysql:5.7然后标准 MySQL 应用程序端口 3306 将在您的主机 IP 上映射到端口 33060。然后在您的 golang 应用程序配置中使用该 IP 和端口。同样正如@Adrian 指出的那样,等待 MySql 容器完全启动。您可以通过 观看它的日志docker logs -f <CONTAINER_UD>。一旦您看到它在本地端口 3306 上进行侦听,您的应用程序应该能够连接。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go