我试图在docker容器中安装mysql,尝试从github中获取各种图像,看起来他们都设法成功安装了mysql但是当我尝试运行mysql时会出错:
ERROR 2002(HY000):无法通过socket' /var/run/mysqld/mysqld.sock'连接到本地MySQL服务器;
系统规格:
到目前为止我尝试过的软件包:
答案 0 :(得分:45)
请记住,您需要连接到正在运行的docker容器。所以你可能想用tcp而不是unix socket。检查docker ps
命令的输出并查找正在运行的mysql容器。如果你找到一个然后使用这样的mysql命令:mysql -h 127.0.0.1 -P <mysql_port>
(你会在docker ps
输出中找到端口)。
如果你在docker ps
输出中找不到任何正在运行的mysql容器,那么试试docker images
找到mysql映像名称并尝试这样运行它:
docker run -d -p 3306:3306 tutum/mysql
其中&#34; tutum / mysql&#34;是在docker images
中找到的图像名称。
答案 1 :(得分:14)
我遇到了同样的问题,事实上,我安装后忘了运行服务..
启动mysql服务器:
/etc/init.d/mysql start
答案 2 :(得分:12)
不知道我是如何实现这一目标的,但是,我已经能够通过输入
来达到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...........
答案 3 :(得分:4)
如果您未在主机上安装MySQL,则必须在容器中执行 (https://docs.docker.com/engine/reference/commandline/exec/#/examples说明 docker run vs docker exec )。
考虑到您的容器正在运行,您可以使用
docker-compose exec database mysql -u root -p
访问客户端。
此外,如果您使用的是Docker Compose,并且您已经声明了名为database的mysql数据库服务,则可以使用: {{1}}
答案 4 :(得分:2)
查看database.yml
文件中的内容。如果您已经拥有普通的Rails应用程序并且只是使用Docker将其包装起来,那么您应该更改(在database.yml
内):
socket: /var/run/mysqld/mysqld.sock #just comment it out
到
host: db
其中db
是来自docker-compose.yml
的数据库服务的名称。这是我的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
您可以在控制台(在app文件夹中)以docker-compose up
启动您的应用。然后等待1分钟(让你的mysql服务完全加载),直到一些新的日志停止出现在控制台中。通常最后一行应该是
db_1 | 2017-12-24T12:25:20.397174Z 0 [注]列表的结尾 非本地分区表
然后(在新的终端窗口中)申请:
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/
答案 5 :(得分:2)
在这个问题之后几个月,我已经掌握了我的Docker技能。我应该使用Docker容器名称。
使用dokerized-nginx作为桥接来暴露容器的ip +端口。
在WEB配置中,我现在使用mysql://USERNAME:PASSWORD@docker_container_name/DB_NAME
通过docker访问Mysql socket(也可以使用docker-compose,使用compose-name而不是容器1)
答案 6 :(得分:1)
我的回答可能有点迟,现在世界可能已经知道了。
您必须打开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
答案 7 :(得分:1)
我今天遇到了同样的问题, 尝试使用此命令运行您的容器。
docker run --name mariadbtest -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypass -d mariadb/server:10.3
答案 8 :(得分:1)
将主机指定为 0.0.0.0 对我有用。
我使用以下命令创建了docker容器
docker run --detach --name=mysql --env="MYSQL_ROOT_PASSWORD=root" --publish 3306:3306 mysql
然后安装mysql客户端
sudo apt-get install mysql-client
使用以下命令通过终端连接到mysql
mysql --host 0.0.0.0 --port 3306 -proot -u root
答案 9 :(得分:0)
对我来说,这仅仅是重启docker守护程序的问题。
答案 10 :(得分:0)
对于我来说,我试图像这样连接到数据库(位于docker内部):
mysql -ppass -u root
但出现与OP相同的错误。
指定主机和端口有帮助:
mysql --host 0.0.0.0 --port 3306 -ppass -u root
答案 11 :(得分:0)
假设您使用的是docker-compose,则docker-compose.yml
文件的外观如下:
version: '3.7'
services:
mysql_db_container:
image: mysql:latest
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: rootpassword
ports:
- 3307:3306
volumes:
- mysql_db_data_container:/var/lib/mysql
web:
image: ${DOCKER_IMAGE_NAME-eis}:latest
build:
context: .
links:
- mysql_db_container
ports:
- 4000:3000
command: ["./scripts/wait-for-it.sh", "mysql_db_container:3306", "--", "./scripts/start_web_server.sh"]
volumes:
- .:/opt/eis:cached
env_file:
- .env
volumes:
mysql_db_data_container:
请注意ports
的{{1}}定义
mysql_db_container
<=这表示mysql将通过端口3307到localhost工作站以及通过docker net中的端口3306进行访问
运行以下命令查看您的容器名称:
ports:
- 3307:3306
在这种情况下,我们有两个容器。
如果您从本地主机工作站连接到$ dc config --services
mysql_db_container
web
并尝试访问那里的mysql控制台,则会收到该错误:
mysql_db_container
此外,如果您尝试从本地工作站进行连接,也会收到该错误:
docker-compose run mysql_db_container bash
root@8880ffe47962:/# mysql -u root -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
root@8880ffe47962:/# exit
只需添加$ mysql -u root -p -P 3307
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
参数(否则mysql假定您要通过mysql套接字进行连接):
--protocol=tcp
参考docker主机名$ mysql --protocol=tcp -u root -p -P 3307
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.21 MySQL Community Server - GPL
Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
。请注意,当您在Docker上下文中运行时,将假定使用TCP协议。
-h mysql_db_container
假设您的mysql容器名称为$ dc run web bash
Starting eligibility-service_mysql_db_container_1_d625308b5a77 ... done
root@e7852ff02683:/opt/eis# mysql -h mysql_db_container -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 18
Server version: 8.0.21 MySQL Community Server - GPL
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
(运行eis_mysql_db_container_1_d625308b5a77
时可以看到),则应该可以进行以下操作:
docker ps
答案 12 :(得分:0)
我的问题是我正在尝试从似乎与我安装的mysql服务器不兼容的mysql客户端版本(在撰写本文时安装了8.0.22版本的mysql:latest)进行连接。
我的mysql客户端版本:
$ mysql --version
mysql Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using EditLine wrapper
我用来安装mysql:latest的docker命令:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=somerootpassword -e MYSQL_USER=someuser -e MYSQL_PASSWORD=someuserpassword -d -p 3306:3306 mysql:latest
从本地mysql客户端连接到mysql服务器时遇到的错误:
$ mysql -u someuser -p -h 127.0.0.1
ERROR 2026 (HY000): SSL connection error: unknown error number
(有时我会得到另一个错误:“错误2013(HY000):在'读取初始通信数据包'时,与MySQL服务器的连接丢失,系统错误:2”。但是我认为当我尝试连接至服务器时会发生这种情况我开始后还为时过早)
我的解决方案是安装mysql:5.7代替:
$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=somerootpassword -e MYSQL_USER=someuser -e MYSQL_PASSWORD=someuserpassword -d -p 3306:3306 mysql:5.7
然后我可以连接到服务器(等待大约1分钟,直到服务器准备好接受连接为止):
$ mysql -u someuser -p -h 127.0.0.1
答案 13 :(得分:0)
要从您的机器连接到 mysql,请使用 127.0.0.1
要从另一个容器内部连接到 mysql-container,您需要找出内部 ip。
docker inspect mysqlcontainername | grep Gatewaw