这是一个很长的标题,但它应该足够明确。
如果我使用bash运行docker容器并通过apt-get install mysql-server
安装mysql,请运行以下命令:mysql -u root -p
我遇到了响亮的声音:
ERROR 2002(HY000):无法通过套接字连接到本地MySQL服务器 ' /var/run/mysqld/mysqld.sock' (2)
几乎所有安装并使用网络的东西都是如此。
这是否意味着我应该EXPOSE
端口3306
?如果该端口在主机(容器外)上使用但容器内的所有应用程序都希望调用该端口,该怎么办? ie:当我在暴露12345:3306
时运行容器时,使用lo
接口的应用程序是否应使用端口3306
或12345
?
我发现这部分非常令人困惑。 谢谢!
答案 0 :(得分:0)
MySQL Docker容器没有使用/ var / run锁。相反,请尝试通过显式指定其IP地址来直接寻址容器。
首先获取容器的IP地址。像这样:
export MYSQL_IP_ADDRESS=$(sudo docker inspect --format="{{ .NetworkSettings.IPAddress }}" mysql_db)
其中' 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-server映像。该映像会自动公开3306,但您必须使用MYSQL_ROOT_HOST启动它,以便它允许您从主机IP连接到它。例如,我的主机IP地址是172.17.121.1。所以我会像这样开始我的容器:
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>