You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Debian测试环境Docker部署MariaDB遇ERROR 2002连接错误求助

解决Docker中Debian测试环境无法连接MariaDB的问题

你遇到的ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")错误,核心原因是Docker镜像构建过程中RUN指令的特性导致的——每个RUN都是在独立的临时容器中执行,执行完毕后进程就会终止。你单独用RUN /etc/init.d/mysql start启动的MariaDB服务,在这个RUN执行完成后就停止了,后续执行mysql命令时,服务器根本没在运行,自然找不到socket文件。

除此之外,你的配置还有几个小问题需要修正,下面是完整的解决方案:

1. 修正Dockerfile的构建逻辑

把MariaDB的启动、初始化、授权、导入SQL的步骤合并到同一个RUN指令中,确保这些操作在同一个shell环境下完成,MariaDB服务能保持到初始化操作结束。同时修正SQL文件的路径问题:

FROM debian:testing

RUN apt update && apt full-upgrade -y \
        && apt install -y --no-install-recommends \
        apache2 \
        php \
        libapache2-mod-php \
        mariadb-server \
        php-mysql \
        openjdk-9-jdk \
        git \
        && rm -rf /var/lib/apt/lists/*

# Copy the database schema to the /tmp directory first
ADD ./mgsv.sql /tmp/

# 合并数据库初始化步骤到一个RUN中
RUN service mysql start \
    && mysql -e "GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '' WITH GRANT OPTION" \
    && mysql < /tmp/mgsv.sql \
    && service mysql stop

RUN git clone https://github.com/qunfengdong/mGSV.git

# 容器启动时启动apache和mysql服务,保持容器前台运行
CMD service apache2 start && service mysql start && tail -f /var/log/apache2/access.log

2. 修正mgsv.sql中的用户拼写错误

你在创建用户时用的是mgsv_user,但授权时写成了mgsvuser,这会导致权限分配失败,修正后的sql文件如下:

CREATE DATABASE mgsv;
CREATE USER 'mgsv_user'@'localhost' IDENTIFIED BY 'mgsvpass';
GRANT SELECT, INSERT, CREATE, DROP ON mgsv.* TO 'mgsv_user'@'localhost';
USE mgsv;
CREATE TABLE IF NOT EXISTS `userinfo` (
    `id` int(10) NOT NULL AUTO_INCREMENT,
    `email` text NOT NULL,
    `hash` text NOT NULL,
    `synfilename` text NOT NULL,
    `annfilename` text NOT NULL,
    `url` text NOT NULL,
    `session_id` text NOT NULL,
    `annImage`   int(5) NOT NULL,
    `create_on` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;

3. 关键说明

  • 合并RUN指令:同一个RUN里的命令共享同一个进程环境,启动MariaDB后,后续的mysql命令能正常连接,完成初始化后再手动停止服务,避免构建镜像时残留运行进程。
  • 容器启动命令:最后添加的CMD指令会在容器启动时同时启动Apache和MariaDB服务,并用tail -f保持容器前台运行(否则容器会在服务启动后立即退出)。
  • SQL文件路径:先执行ADD指令把sql文件放到/tmp/,再在初始化步骤中使用正确的路径/tmp/mgsv.sql,避免文件找不到的问题。

这样修改后,构建镜像时就能正常完成数据库初始化,容器启动后服务也能正常运行,不会再出现连接socket的错误。

内容的提问来源于stack exchange,提问作者user3523406

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 10:16:28