Docker容器bash can';t通过套接字连接到本地MySQL服务器
这是一个很长的标题,但应该足够明确 如果我使用bash运行docker容器并通过Docker容器bash can';t通过套接字连接到本地MySQL服务器,mysql,docker,docker-container,Mysql,Docker,Docker Container,这是一个很长的标题,但应该足够明确 如果我使用bash运行docker容器并通过apt get install mysql server安装mysql,请运行以下命令:mysql-u root-p 我遇到了一个响亮的: 错误2002(HY000):无法通过套接字连接到本地MySQL服务器 “/var/run/mysqld/mysqld.sock”(2) 几乎所有安装和使用网络的设备都是如此 这是否意味着我应该公开端口3306?如果主机(容器外部)正在使用该端口,但容器内的所有应用程序都希望调用该
apt get install mysql server
安装mysql,请运行以下命令:mysql-u root-p
我遇到了一个响亮的:
错误2002(HY000):无法通过套接字连接到本地MySQL服务器
“/var/run/mysqld/mysqld.sock”(2)
几乎所有安装和使用网络的设备都是如此
这是否意味着我应该公开端口3306
?如果主机(容器外部)正在使用该端口,但容器内的所有应用程序都希望调用该端口,该怎么办?i、 e:当我在公开12345:3306
时运行容器时,使用lo
界面的应用程序是否会使用端口3306
或12345
我觉得这部分很混乱。
谢谢 MySQL Docker容器没有使用/var/run锁。相反,请尝试直接通过显式指定容器的IP地址来寻址容器
首先获取容器的IP地址。大概是这样的:
export MYSQL_IP_ADDRESS=$(sudo docker inspect --format="{{ .NetworkSettings.IPAddress }}" mysql_db)
corba@bilbovm01:~$ sudo docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=blat -e MYSQL_ROOT_HOST=172.17.121.1 mysql/mysql-server:latest
aa09bc5a30b8f84b68d760d828f8e451238405a177caef4ad802bef44ad43352
corba@bilbovm01:~$ mysql -h $MYSQL_IP_ADDRESS -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.17 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, 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>
其中'mysql_db'是您为mysql Docker容器指定的名称
您应该能够“回显”您的IP地址:
corba@bilbovm01:~$ echo $MYSQL_IP_ADDRESS
172.17.121.2
然后在命令行上指定主机名:
mysql -h $MYSQL_IP_ADDRESS -u root -p
为了回答关于端口可见性的另一个问题,我假设您使用的是hub.docker.com上的标准mysql/mysql服务器映像。该映像自动公开3306,但您必须使用MYSQL\u ROOT\u主机启动它,以便它允许您从主机IP连接到它。例如,我的主机IP地址是172.17.121.1。所以我会这样启动我的容器:
export MYSQL_IP_ADDRESS=$(sudo docker inspect --format="{{ .NetworkSettings.IPAddress }}" mysql_db)
corba@bilbovm01:~$ sudo docker run -d --name mysql -e MYSQL_ROOT_PASSWORD=blat -e MYSQL_ROOT_HOST=172.17.121.1 mysql/mysql-server:latest
aa09bc5a30b8f84b68d760d828f8e451238405a177caef4ad802bef44ad43352
corba@bilbovm01:~$ mysql -h $MYSQL_IP_ADDRESS -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.17 MySQL Community Server (GPL)
Copyright (c) 2000, 2016, 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>
这似乎是对Unix套接字的抱怨,而不是对网络套接字的抱怨。(顺便说一句,请注意,install
不会启动该服务。)宾果,这似乎是mysql的pb。我将再次检查它是否解决了我遇到的其他一些问题。但出于好奇:为什么要在运行时而不是构建时安装mysql?这是一个非常长且复杂的交互式安装脚本的一部分。我计划把事情做好,但与此同时我正在手动安装docker容器。@OliverCharlesworth我编辑了这个问题,以更好地反映我遇到的真正问题。如果你想提供答案,我会选择它。你是对的。由于某些原因,本地虚拟机在安装服务后自动启动服务,但docker映像没有启动。