当前位置: 首页 > 面试题库 >

设置MySQL并在Dockerfile中导入转储

印成天
2023-03-14
问题内容

我正在尝试为我的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构建期间设置数据库创建和转储导入的任何想法?


问题答案:

中的每条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


 类似资料:
  • 关于如何在Dockerfile构建过程中设置数据库创建和转储导入有什么想法吗?

  • 在执行这一行时,我总是用代码0退出web_1:mysql-h$mysql_host-u$mysql_user-p$mysql_password$mysql_database 但是,我可以在容器创建后执行docker exec-it<>bash,在那里执行install-sampledata,它就可以工作了 我有这样的docker-compose 和install-sampledata文件

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 是否有任何文献记载的技术可以加快mySQL转储和导入的速度?

  • 问题内容: 您可以在构建自定义图像时设置图像名称,如下所示: 有没有一种方法可以在Dockerfile中定义映像的名称,所以我不必在命令中提及它? 问题答案: Dockerfile中不支持图像的标记。这需要在您的构建命令中完成。解决方法是,您可以使用docker- compose.yml进行构建,以标识目标映像名称,然后运行。一个示例docker- compose.yml看起来像 就是说,有人反对

  • 问题内容: Python使用环境变量来确定应在哪个文件夹中查找模块。您可以通过修改来解决它,这对于纯Python模块非常有效。但是,当模块使用共享的目标文件或静态库时,它会在(在linux上)查找这些文件,但是据我所知,这不能轻易更改,并且依赖于平台。 解决此问题的快速方法当然是设置环境变量或调用像这样的脚本,但是随后您必须为打开的每个新shell再次设置它。同样,在我的情况下,文件将始终与文件位

  • 问题内容: 我正在使用Docker和Docker-compose构建一堆nginx + php。 我试图在我的文件中设置时区,并在Dockerfile中使用它,但是我可能会误解文档中的内容。 .env docker-compose.yml php7-fpm / Dockerfile 容器内部的时区设置不正确(在php容器bash中运行)。如果我在Dockerfile中手动编写区域,那么它将起作用。