在Dockerfile中设置MySQL并导入转储 [英] Setting up MySQL and importing dump within Dockerfile

查看:109
本文介绍了在Dockerfile中设置MySQL并导入转储的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在为我的LAMP项目设置一个Docker文件,但是在启动MySQL时有一些问题。我的Docker文件中有下面的行:

  VOLUME [/ etc / mysql,/ var / lib / mysql ] 
ADD dump.sql /tmp/dump.sql
RUN / usr / bin / mysqld_safe& sleep 5s
运行mysql -u root -eCREATE DATABASE mydb
运行mysql -u root mydb< /tmp/dump.sql

但是我不断得到这个错误:

  ERROR 2002(HY000):无法通过套接字连接到本地MySQL服务器'/var/run/mysqld/mysqld.sock'(111)
/ p $ p

在Dockerfile构建期间如何设置数据库创建和转储导入的任何想法?

解决方案

Dockerfile 中的每个 RUN 在不同的容器中执行(如 RUN )。



Dockerfile 中,您有三个 RUN 说明。问题是MySQL服务器只能在第一个启动。在其他的,没有MySQL正在运行,这就是为什么你得到你的连接错误与 mysql 客户端。



解决这个问题你有两个解决方案。



解决方案1:使用一行运行



  RUN / bin / bash -c/ usr / bin / mysqld_safe& &安培;&安培; \ 
sleep 5&& \
mysql -u root -eCREATE DATABASE mydb&& \
mysql -u root mydb< /tmp/dump.sql



解决方案2:使用脚本



创建可执行脚本 init_db.sh

 #!/ bin / bash 
/ usr / bin / mysqld_safe&
sleep 5
mysql -u root -eCREATE DATABASE mydb
mysql -u root mydb< /tmp/dump.sql

将这些行添加到您的 Dockerfile

  ADD init_db.sh /tmp/init_db.sh 
RUN /tmp/init_db.sh


I'm trying to setup a Dockerfile for my LAMP project, but i'm having a few problems when starting MySQL. I have the folowing lines on my 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

But I keep getting this error:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)

Any ideas on how to setup database creation and dump import during a Dockerfile build?

解决方案

Each RUN instruction in a Dockerfile is executed in a different container (as explained in the documentation of RUN).

In your Dockerfile, you have three RUN instructions. The problem is that MySQL server is only started in the first. In the others, no MySQL are running, that is why you get your connection error with mysql client.

To solve this problem you have 2 solutions.

Solution 1: use a one-line RUN

RUN /bin/bash -c "/usr/bin/mysqld_safe &" && \
  sleep 5 && \
  mysql -u root -e "CREATE DATABASE mydb" && \
  mysql -u root mydb < /tmp/dump.sql

Solution 2: use a script

Create an executable script init_db.sh:

#!/bin/bash
/usr/bin/mysqld_safe &
sleep 5
mysql -u root -e "CREATE DATABASE mydb"
mysql -u root mydb < /tmp/dump.sql

Add these lines to your Dockerfile:

ADD init_db.sh /tmp/init_db.sh
RUN /tmp/init_db.sh

这篇关于在Dockerfile中设置MySQL并导入转储的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆