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文件

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

1
2
3
4
5
6
7
8
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: [Warning] Using a
password on the command line interface can be insecure. ERROR 2002
(HY000): Can't connect to local MySQL server through socket
'/var/run/mysqld/mysqld.sock' (2)

生成文件

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

1
2
3
4
5
6
7
8
9
10
11
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): Can't connect to
local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)


原因是mysql进程未运行,因为您在Dockerfile中覆盖了CMD,而基础CMD开始了mysql进程。

1
CMD tail -f /dev/null

从Dockerfile中删除CMD

您不需要替换,因为基本映像会处理它,但是如果要替换,请使用以下命令

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

而且ADD setup.sql /docker-entrypoint-initdb.d仅在使用正式入口点脚本运行MySQL进程时才可能。