设置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构建期间设置数据库创建和转储导入的任何想法?
回答:
中的每条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.shRUN /tmp/init_db.sh
以上是 设置MySQL并在Dockerfile中导入转储 的全部内容, 来源链接: utcz.com/qa/414372.html