2017-08-02 79 views
1

我在创建CentOS服务器期间通过Terraform运行以下bash脚本。连接到MySQL失败在Terraform中使用Bash,但通过SSH工作

"sudo docker run -d --restart=unless-stopped --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=${var.mysql_root_password} mysql", 
"sudo yum -y install mysql", 
"mysql -u root -p${var.mysql_root_password} -h 127.0.0.1" 

但MySQL命令与下面的输出失败

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

但是,如果我通过SSH连接到服务器,我可以运行mysql命令,并成功地连接到MySQL。

我缩短了上面的mysql命令来简化我的问题。我试图使用这个命令连接到MySQL实例并创建一个用户和数据库。我设法通过作为docker run命令的一部分传递我想通过环境变量创建的用户名和数据库来实现它。不过,我很想知道为什么上述功能不能通过Terraform工作,但在SSH连接服务器时工作正常。

干杯

克里斯

+0

SSH为您提供了一个TTY交互式shell,而Terraform不会这样做。所以你需要一个不需要TTY的命令 –

回答

0

你需要等待。启动数据库容器并等待服务准备就绪。

"sudo docker run -d --restart=unless-stopped --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=${var.mysql_root_password} mysql", 
"sudo yum -y install mysql", 
sleep 180 
"mysql -u root -p${var.mysql_root_password} -h 127.0.0.1"