【问题标题】:ERROR 2002 (HY000): Can't connect to local MySQL server through socketERROR 2002 (HY000): 无法通过套接字连接到本地 MySQL 服务器
【发布时间】:2018-03-16 09:33:46
【问题描述】:

我在尝试连接数据库时在 debian 测试 ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory") 时遇到此错误。

我在 Dockerfile 中做了如下设置:

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/*

RUN /etc/init.d/mysql start

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

# Permit root login without password from outside container.
RUN mysql -e "GRANT ALL ON *.* TO root@'%' IDENTIFIED BY '' WITH GRANT OPTION"

# create the default database from the ADDed file.
RUN mysql < mgsv.sql

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

mgsv.sql 看起来像这样:

CREATE DATABASE mgsv;
CREATE USER 'mgsv_user'@'localhost' IDENTIFIED BY 'mgsvpass';
GRANT SELECT, INSERT, CREATE, DROP ON mgsv.* TO 'mgsvuser'@'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 ;

我错过了什么?

提前谢谢你

【问题讨论】:

    标签: mysql docker debian mariadb


    【解决方案1】:

    你误解了 docker 的工作原理。

    您编写的 dockerfile 不是脚本。每个命令都是一个独立的命令,并且仅具有为其将生成的最终 docker 映像创建一个层的效果。 这意味着当您运行/etc/init.d/mysql start 时,在以下命令中您将无法连接到 mysql 服务。它根本没有运行。

    您的所有数据导入操作都必须在容器为 running 时完成,而不是在容器为 building 时完成。

    我的建议是使用一个预构建的 mysql 容器镜像,也许你可以在这里找到一个 https://hub.docker.com/_/mysql/ ,在你的容器运行之后你可以手动创建你的数据库。

    如果您需要自动创建数据库,您需要创建一个自定义镜像,在其中更新您的 docker 镜像的entrypointcmd,以便在 DBMS 启动后执行数据库创建,但老实说这是恕我直言,这不是一个很好的做法。

    【讨论】:

      猜你喜欢
      • 2014-03-28
      • 1970-01-01
      • 1970-01-01
      • 2012-07-24
      • 2013-11-08
      相关资源
      最近更新 更多