在Docker中安装MySQL失败,错误消息“无法通过套接字连接到本地MySQL服务器”

我正在尝试在docker容器中安装mysql,试图从github尝试各种图片,似乎他们都成功地安装了mysql,但是当我尝试运行mysql时,它给出了一个错误:

错误2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器

系统规格:

  • 它在AWS上的Ubuntu 12,04
  • Docker 0.10.0

我到目前为止试过的软件包

  • https://github.com/eugeneware/docker-wordpress-nginx
  • https://github.com/tutumcloud/tutum-docker-mysql

请记住,您将需要连接到正在运行的docker集装箱。 所以你可能想用tcp代替unix socket。 检查docker ps命令的输出并查找正在运行的mysql容器。 如果你find一个然后使用mysql命令是这样的: mysql -h 127.0.0.1 -P <mysql_port> (你会在mysql -h 127.0.0.1 -P <mysql_port> docker ps输出中find端口)。 如果在docker ps输出中找不到任何正在运行的mysql容器,请尝试使用docker images来查找mysql映像名称,然后尝试如下所示运行它: docker run -d -p 3306:3306 tutum/mysql其中“tutum / mysql”是在docker imagesfind的图像名称。

不知道如何实现这一点,但是,我已经能够通过键入到达MYSQL

$ mysql -u root -h

 mywebsite: image: benftwc/pldev-webserver volumes: - ./mywebsite.fr/:/var/www/ working_dir: /var/www/ ports: - "8009:8009" command: php -S 0.0.0.0:8009 links: - database database: image: library/mysql environment: MYSQL_ROOT_PASSWORD: root ports: - "3310:3306 

 root@422f4d1f454a:/# mysql -u root -h 127.0.0.1 -p3310 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

 root@422f4d1f454a:/# mysql -u root -h database -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g........... 

我有同样的问题,其实,我没有理由忘记安装后运行服务..

启动mysql服务器:

 /etc/init.d/mysql start 

如果您的主机上没有安装MySQL,您必须在容器中执行它( https://docs.docker.com/engine/reference/commandline/exec/#/examples提供有&#x5173;docker run vs docker exec的解释)。

考虑到你的容器正在运行,你可以使用docker exec yourcontainername mysql -u root -p来访问客户端。

另外,如果您使用的是Docker Compose,并且已经声明了一个名为database的mysql数据库服务,则可以使用: docker-compose exec database mysql -u root -p

我可能会迟到回答,现在可能世界知道这一点。

所有你必须打开您的docker集装箱docker访问它。 例如,在运行容器时:

docker run –name mysql_container -e MYSQL_ROOT_PASSWORD = root -d -p 3306:3306 mysql / mysql-server:5.7

这将允许你的容器的mysql可以从主机访问。 稍后可以连接到它。

docker exec -it mysql_container mysql -u root -p

看看你的database.yml文件中有什么。 如果你已经有了简单的Rails应用程序,只需要用Docker包装它,你应该改变(在database.yml ):

 socket: /var/run/mysqld/mysqld.sock #just comment it out 

 host: db 

其中db是来自docker-compose.yml db服务的名称。 这里是我docker-compose.yml

 version: '3' services: web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/myapp ports: - "3000:3000" links: - db db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: root 

你作为docker-compose up开始你的应用程序在控制台(在应用程序文件夹) docker-compose up 。 然后等待1分钟 (让你的MySQL服务完全加载),直到一些新的日志停止出现在控制台。 通常最后一行应该是这样的

db_1 | 2017-12-24T12:25:20.397174Z 0 [注意]非本地分区表的列表结束

然后(在新的terminal窗口中)应用:

 docker-compose run web rake db:create 

接着

 docker-compose run web rake db:migrate 

完成工作后,停止加载的图像

 docker-compose stop 

不要在这里使用docker-compose down因为如果你这样做的话,你将会清除你的数据库内容。

下一次当你想恢复你的工作适用于:

 docker-compose start 

其余的事情完全按照这里解释: https : //docs.docker.com/compose/rails/

在Docker容器中安装MySQL后,我有这个错误:

错误2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2)

我已经解决了这个问题。 里面的Docker容器我做了MySQL服务重启:

服务apache2重新启动

或者用于其他Linux发行版:

服务httpd重启

服务器重新启动后MySQL已正常工作。