首页 > 解决方案 > 为什么我不能在 Windows 中使用 5.7 或 5.6 mysql docker 映像而不是 mysql 8 和 terraform?

问题描述

我在 windows 中使用 terraformmysql_database内部测试docker_container.mysql,但每次我尝试使用与used bymysql:8内部不同的图像时,terraform 需要 5 分钟来创建资源并引发以下错误:docker_image.mysqldocker_container.mysqlmysql_database

Error: Could not connect to server: dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine actively refused it.

  on main.tf line 33, in resource "mysql_database" "test":
  33: resource "mysql_database" "test" {

这是 main.tf:

provider "docker" {
  host = "npipe:////.//pipe//docker_engine"
}

resource "docker_image" "mysql" {
  name         = "mysql:8"
  //keep_locally = true
}

resource "docker_container" "mysql" {
  name    = "mysql"
  image   = docker_image.mysql.latest
        restart = "always"
  env     = [
    "MYSQL_ROOT_PASSWORD=root"
  ]
  volumes {
    volume_name    = "mysql-vol"
    container_path = "/var/lib/mysql"
  }
  ports {
    internal = 3306
    external = 3306
  }
}

provider "mysql" {
  endpoint = "127.0.0.1:3306"
  username = "root"
  password = "root"
}

resource "mysql_database" "test" {
  name      = "test"
  depends_on = [docker_container.mysql]
}

我正在测试https://hub.docker.com/_/mysql上显示的 mysql 图像标签,特别是 5.6、5.7 和 8,但仅使用 mysql:8 似乎有效 是否有其他方法可以引用那些 mysql图片标签?

标签: mysqldockerwindowterraformterraform-provider-mysql

解决方案


我试图验证这个问题,当你保持相同时,我观察到与你相同的错误,仅适用于 mysql 5.7 和 5.6 volumes

从 terraform 脚本中删除以下部分后

   volumes {
     volume_name    = "mysql-vol"
    container_path = "/var/lib/mysql"
   }

删除现有的 mysql docker 映像,mysql 5.6、mysql 5.7 和 8 按预期工作。

顺便说一句,导致连接失败的错误是:

ERROR 2013 (HY000): Lost connection to MySQL server at 'handshake: reading initial communication packet', system error: 11

推荐阅读