docker容器内的mysql说“无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器”

Posted

技术标签:

【中文标题】docker容器内的mysql说“无法通过套接字\'/var/run/mysqld/mysqld.sock\'连接到本地MySQL服务器”【英文标题】:mysql inside a docker container says "Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' "docker容器内的mysql说“无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器” 【发布时间】:2020-02-10 04:03:56 【问题描述】:

Dockerfile

我正在尝试使用 Docker。这是我的 dockerfile:

FROM mysql:latest
ENV MYSQL_ROOT_PASSWORD 123
ENV MYSQL_DATABASE users
ENV MYSQL_USER admin
ENV MYSQL_PASSWORD 1234
ADD setup.sql /docker-entrypoint-initdb.d
EXPOSE 3306
CMD tail -f /dev/null

从容器访问Mysql

以下是我从容器中访问mysql的尝试。

root@76757566f93a:/# mysql -uroot -p123 mysql: [警告] 使用 命令行界面上的密码可能不安全。错误 2002 (HY000): 无法通过套接字连接到本地 MySQL 服务器 '/var/run/mysqld/mysqld.sock' (2)

生成文件

最后,.. 这是我用来运行所有 docker 命令的 Makefile:

container = db
image-name = senso

run:
    docker run --name $(container) -d $(image-name)

bash:
    docker exec -it $(container) /bin/bash

build:
    docker build -t $(image-name) .

mysql -v

我还尝试运行mysql -v 来检查容器内的mysql 是否正常,我认为不是。

root@76757566f93a:/# mysql -v ERROR 2002 (HY000): 无法连接 本地 MySQL 服务器通过 socket '/var/run/mysqld/mysqld.sock' (2)

【问题讨论】:

【参考方案1】:

原因是mysql 进程没有运行,因为您覆盖了 Dockerfile 中的CMD,作为基础CMD 启动Mysql 进程。

CMD tail -f /dev/null

从 Dockerfile 中删除 CMD

您不需要替换,因为基础映像会处理它,但如果要替换,请使用以下内容

ENTRYPOINT ["/entrypoint.sh"]
CMD ["mysqld"]

ADD setup.sql /docker-entrypoint-initdb.d 也只有在 MySQL 进程使用官方入口点脚本运行时才有可能。

【讨论】:

以上是关于docker容器内的mysql说“无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器”的主要内容,如果未能解决你的问题,请参考以下文章

在 Docker 中安装 MySQL 失败并显示错误消息“无法通过套接字连接到本地 MySQL 服务器”

docker mysql 容器 数据库文件怎么娴宿主机器上

docker mysql 容器 数据库文件怎么娴宿主机器上

你好,我想请教下docker里的centos容器怎么改变udp缓冲区,谢谢,目前好像改不了说的文件readonly?

修改Docker容器内的MySQL服务密码,并成功完成可视化工具登录绝对有效

修改Docker容器内的MySQL服务密码,并成功完成可视化工具登录绝对有效