(由于我对Docker或mysql管理的了解有限,这可能是一个愚蠢的问题,但是由于我在这个问题上花费了一整夜,所以我敢问这个问题。)
简而言之
我想在docker容器中运行mysql并从主机连接到它。到目前为止,我取得的最好成绩是:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
更多细节
我正在使用以下内容Dockerfile
:
FROM ubuntu:14.04.3
RUN apt-get update && apt-get install -y mysql-server
# Ensure we won't bind to localhost only
RUN grep -v bind-address /etc/mysql/my.cnf > temp.txt \
&& mv temp.txt /etc/mysql/my.cnf
# It doesn't seem needed since I'll use -p, but it can't hurt
EXPOSE 3306
CMD /etc/init.d/mysql start && tail -F /var/log/mysql.log
在该文件所在的目录中,我可以成功构建映像并使用以下命令运行它:
> docker build -t my-image .
> docker run -d -p 12345:3306 my-image
当我附加到图像时,它似乎可以正常工作:
# from the host
> docker exec -it <my_image_name> bash
#inside of the container now
$ mysql -u root
Welcome to the MySQL monitor. Commands end with ; or \g.
[...]
但是,主持人并没有取得太多成功:
> mysql -P 12345 -uroot
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)
更多细节
- 我已经看到有一个看起来像我的问题。但是,它是不一样的(无论如何也没有任何答案)
- 我已经看到有专门针对mysql的映像,但是我并没有获得更多的成功
- 我
grep -v
可能会觉得很奇怪。诚然,可能会有更清洁的方法来做到这一点。但是,当我附加图像时,我可以观察到它实际上按预期工作了(即:删除了bind-address
)。我可以在容器中看到/var/log/mysql/error.log
:
服务器主机名(绑定地址):“ 0.0.0.0”;端口:3306-“ 0.0.0.0”解析为“ 0.0.0.0”;在IP:“ 0.0.0.0”上创建的服务器套接字。