2017-08-02 45 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"