在尝试连接数据库时,我在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 ;
我错过了什么?
提前谢谢
答案 0 :(得分:0)
你误解了码头工作原理。
您编写的dockerfile不是脚本。每个命令都是独立的命令,只能为它将生成的最终docker镜像创建一个图层。
这意味着当您运行/etc/init.d/mysql start
时,在以下命令中,您将能够连接到mysql服务。它根本就没有运行。
您的所有数据导入操作都必须在容器为running
时完成,而不是在building
时。
我的建议是使用预先构建的mysql容器映像,也许可以在这里找到https://hub.docker.com/_/mysql/,并且在容器运行后,您可以手动创建数据库。
如果需要自动创建数据库,则需要创建自定义映像,在其中更新docker映像的entrypoint
或cmd
,以便在DBMS启动后执行数据库创建,但老实说,这不是一个很好的做法恕我直言。