【发布时间】:2016-01-05 05:55:33
【问题描述】:
(由于我对 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)
更多细节
- 我看到有一个looks like mine 的问题。但是,它不一样(无论如何它没有任何答案)
- 我看到有图片dedicated to 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'。
【问题讨论】:
-
可能没那么笨。我现在第 10 次偶然发现这个,终于有时间在家里尝试一下。
标签: mysql docker dockerfile