无法连接到mysql码头容器

问题描述:

我有一个Dockerfile,我正在处理MySQL5.6并配置它(主要是用bash和sql脚本)。我能够构建和运行,但是当我尝试连接到容器内的数据库中,我总是得到:无法连接到mysql码头容器

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

我试图访问MySQL数据库使用:

mysql -u root -p

mysql -u root -h 127.0.0.1 -p

我已经尝试过所有我能想到的东西,并在互联网上查找文章,但没有任何工作。有人能告诉我为什么吗?这是我的Dockerfile和bash脚本分别为:

FROM mysql:5.6 

MAINTAINER Ryan K. 
USER root 

ADD mysqlAddUser.sh /tmp/ 
CMD ["/tmp/mysqlAddUser.sh"] 
ADD foo.sql /docker-entrypoint-initdb.d/foo.sql 

EXPOSE 3306 

## Starting mysqld and running Database Scripts 
CMD ["/usr/bin/mysqld_safe"] 

bash脚本:

#!/bin/bash 
DATABASE_PASSWORD=test 

/usr/bin/mysqld_safe & 
mysqladmin --login-path=local -uroot -p"$DATABASE_PASSWORD" 
mysqladmin password "$DATABASE_PASSWORD" 

mysql -uroot -p"$DATABASE_PASSWORD" -e "UPDATE mysql.user SET Password=PASSWORD('$DATABASE_PASSWORD') WHERE User='root'" 
mysql -uroot -p"$DATABASE_PASSWORD" -e "DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1')" 
mysql -uroot -p"$DATABASE_PASSWORD" -e "DELETE FROM mysql.user WHERE User=''" 
mysql -uroot -p"$DATABASE_PASSWORD" -e "DELETE FROM mysql.db WHERE Db='test' OR Db='test\_%'" 
mysql -uroot -p"$DATABASE_PASSWORD" -e "FLUSH PRIVILEGES" 

DB_ROOT_PASS=TEST 
DB=portal 

mysql --login-path=local -uroot -p"$DB_ROOT_PASS" 
mysql -uroot -p"$DATABASE_PASWORD" -e "CREATE DATABASE portal"; 
mysql -uroot -p"$DATABASE_PASSWORD" -e "CREATE USER [email protected]'localhost' IDENTIFIED BY 'testing'"; 
mysql -uroot -p"$DATABASE_PASSWORD" -e "GRANT ALL PRIVILEGES ON portal.* TO [email protected]'localhost'"; 
mysql -uroot -p"$DATABASE_PASSWORD" -e "FLUSH PRIVILEGES"; 

mysql -uroot -p"$DATABASE_PASSWORD" $DB < /tmp/foo.sql 
+0

插座存在于容器中。如果你从容器外连接,你必须用'-h'提供主机,这样mysql才能找到你的数据库。 –

+0

我从容器中访问它..基本上在/ bin/bash中运行容器并尝试使用mysql -u root -p – ryekayo

+0

从那里访问数据库该容器中的该路径是否存在该套接字? –

奋力用同样的问题,在码头工人,容器的MySQL。有时我可以连接到mysql客户端,但更多的时候不能。切换到mariadb并有同样的问题。

似乎已经解决了这个问题,我在我的脚本中添加了一些睡眠命令,用于创建,启动和销毁Docker容器。在像'docker run'和'docker stop'这样的命令之后,我添加了'sleep 10',这似乎有所帮助。

+0

谢谢你的信息。我真的发现为什么这是发生..原因是因为我有一个只有1GB虚拟RAM分配的Ubuntu VM。这肯定会导致问题,特别是如果我有一个运行Tomcat的容器。 – ryekayo