ERROR 2002(HY000):无法通过socket' /var/run/mysqld/mysqld.sock&#39连接到本地MySQL服务器; (2)使用Docker官方mysql镜像时

时间:2018-01-06 21:11:37

标签: mysql sockets docker

我实现了以下shell脚本,该脚本使用官方mysql Docker镜像创建Docker容器,然后创建多个数据库。

#!/bin/bash

mysql_apim_password=root
mysql_apim_host=localhost
mysql_apim_username=root


if [ ! "$(docker ps -q -f name=mysql-5.7)" ]; then
    echo -e "---> Starting MySQL docker container..."
    container_id=$(docker run -d --name mysql-5.7 -p 3306:3306 -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=$mysql_apim_password mysql:5.7.19)
    echo $container_id

    docker ps -a
    echo -e "---> Waiting for MySQL to start on 3306..."
    while ! nc -z $mysql_apim_host 3306; do
        sleep 1
        printf "."
    done
    echo ""
    echo -e "---> MySQL Started."
else
    echo -e "---> MySQL is already running..."
fi

#sleep 10

echo -e "---> Creating databases..."
docker exec -it mysql-5.7 mysql -h$mysql_apim_host -u$mysql_apim_username -p$mysql_apim_password -e "DROP DATABASE IF EXISTS "am_db"; DROP DATABASE IF EXISTS "um_db"; DROP DATABASE IF EXISTS "reg_db"; CREATE DATABASE "am_db"; CREATE DATABASE "um_db"; CREATE DATABASE "reg_db";"

在数据库创建之前执行上述脚本而不休眠时,我遇到以下错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

我发现this一般为上述问题和其他许多人提供了一套解决方案,但到目前为止,他们都没有帮助我。

我在容器创建后的前几秒内通过访问正在运行的Docker容器进行了一些快速测试,以检查是否尚未创建定义的套接字文件,但我发现它始终存在。

当我在数据库创建之前休眠(取消注释上面代码段中的sleep 10)时,该过程执行时没有任何问题。

但是在Docker容器中导致上述问题的原因是什么?

0 个答案:

没有答案