Jenkinsfile中的mysqldump无法连接到服务器

时间:2018-08-27 14:26:26

标签: mysql docker jenkins jenkins-pipeline

这是Jenkinsfile中出现问题的阶段:

stage ('Build & Run container') {
    imageMysql     = docker.build('backend-server-mysql-dev', '--no-cache -f build/docker/mysql/Dockerfile .')
    containerMysql = imageMysql.run("--name backend-server-mysql-dev -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root -e  MYSQL_ROOT_USER=root -e MYSQL_PASSWORD=mahmoud -e MYSQL_DATABASE=soextremedb")
    sh 'docker ps | docker exec -it backend-server-mysql-dev /bin/bash | ls -l | mysqldump -u root -proot soextremedb < soextremedb.sql'
}

这是错误消息:

Shell Script -- docker ps | docker exec -it backend-server-mysql-dev /bin/bash | ls -l | mysqldump -u root -proot soextremedb < soextremedb.sql -- (self time 566ms)
[soextremeBackEnd_Dev-MBC6SQWYSNVE6ADN2QOAOGZ4YYVT5E6K7Y2FUP6ROOROWRMCPFOA] Running shell script
+ docker ps
+ docker exec -it backend-server-mysql-dev /bin/bash
+ ls -l
+ mysqldump -u root -proot soextremedb
**mysqldump: Got error: 2002: "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")" when trying to connect the input device is not a TTY**

1 个答案:

答案 0 :(得分:0)

我认为sh命令有几个问题。

首先,|用于将一个命令的输出发送到下一个命令,但是看起来您只是在尝试执行一系列命令。为此,您可以使用;&&。您可以查看this answer,以获取有关Shell运算符的精彩摘要。

然后,对于您的docker exec命令,我认为您实际上是想非交互地调用一系列命令:先不要使用-it并使用/bin/bash -c来传递{{ 3}}。

这将为您提供以下信息:

sh 'docker ps ; docker exec backend-server-mysql-dev /bin/bash -c "ls -l ; mysqldump -u root -proot soextremedb < soextremedb.sql"'