开发者社区> 问答> 正文

设置MySQL并在Dockerfile中导入转储

我正在尝试为我的LAMP项目设置一个Dockerfile,但是在启动MySQL时遇到了一些问题。我在Dockerfile上有以下几行:

VOLUME ["/etc/mysql", "/var/lib/mysql"] ADD dump.sql /tmp/dump.sql RUN /usr/bin/mysqld_safe & sleep 5s RUN mysql -u root -e "CREATE DATABASE mydb" RUN mysql -u root mydb < /tmp/dump.sql 但我不断收到此错误:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111) 关于如何在Dockerfile构建期间设置数据库创建和转储导入的任何想法?

展开
收起
保持可爱mmm 2020-05-11 17:01:09 644 0
1 条回答
写回答
取消 提交回答
  • 中的每条RUN指令都在Dockerfile不同的层中执行(如的文档中所述RUN)。

    在中Dockerfile,您有三个RUN说明。问题是MySQL服务器仅在第一个启动。在其他版本中,没有MySQL正在运行,这就是为什么mysql客户端出现连接错误的原因。

    要解决此问题,您有2个解决方案。

    解决方案1:使用单行 RUN RUN /bin/bash -c "/usr/bin/mysqld_safe --skip-grant-tables &" &&
    sleep 5 &&
    mysql -u root -e "CREATE DATABASE mydb" &&
    mysql -u root mydb < /tmp/dump.sql 解决方案2:使用脚本 创建一个可执行脚本init_db.sh:

    #!/bin/bash /usr/bin/mysqld_safe --skip-grant-tables & sleep 5 mysql -u root -e "CREATE DATABASE mydb" mysql -u root mydb < /tmp/dump.sql 将这些行添加到您的Dockerfile:

    ADD init_db.sh /tmp/init_db.sh RUN /tmp/init_db.sh来源:stack overflow

    2020-05-11 17:01:19
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像