【问题标题】:'dial tcp 127.0.0.1:3306: getsockopt: connection refused' when trying to run a docker image'dial tcp 127.0.0.1:3306: getsockopt: connection denied' 尝试运行 docker 映像时
【发布时间】:2018-04-04 21:49:32
【问题描述】:

这是我在做什么的图片:

  1. 我有本地 Go API 代码,我已将其构建到 docker 映像中。
  2. 我已经从 docker 中提取了 MySQL docker 镜像。
  3. 我在 MySQL 中有数据库,Go API 正在访问 mysql。

在我的 Go API 是本地的并且 mysql 是 docker 容器之前一切正常。现在我已将本地 Go 代码构建为 docker 映像,当我尝试使用 docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.5 运行此映像时,Docker 容器立即启动并退出。 我尝试Docker Start -a Container-ID 再次启动容器,我收到此错误 'dial tcp 127.0.0.1:3306: getsockopt: connection denied'。

当我搜索此错误时,我得到了这个输入 - “在 mysql 服务器配置中设置绑定地址:127.0.0.1 后,我能够使用主机 localhost:3306 进行安装。”

但我不知道如何设置绑定地址。

任何有关这方面的意见都会有所帮助。

谢谢。

【问题讨论】:

  • 你使用的db url是什么?
  • 如果我理解正确,您尝试使用 127.0.0.1:3306 从您的 Go 容器访问 MySQL?
  • @PratheeshM,Daniel,我没有使用 127.0.0.1:3306 连接 Go 容器,而是使用 localhost。这是确切的连接字符串: var mysql_connect = "root:password@tcp(localhost:3306)/dbname"

标签: mysql docker tcp containers


【解决方案1】:

您应该使用 Docker 的网络服务发现功能。

将两个容器放在同一个网络上,然后它们可以通过 DNS 发现彼此。

例如:

docker network create mynet
docker run --net mynet --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:5.5
docker run --net mynet --name app -p 80:80 -d myappimage:latest

这两个容器都能够将 'mysql' 或 'app' 解析为每个容器在 'mynet' 网络上的 ip。配置您的应用程序以连接到 'mysql:3306' 处的 mysql。

【讨论】:

    猜你喜欢
    • 2019-08-12
    • 1970-01-01
    • 2020-02-05
    • 2020-10-23
    • 2022-10-14
    • 1970-01-01
    • 2022-12-30
    • 1970-01-01
    • 2021-09-25
    相关资源
    最近更新 更多