我正在尝试为我的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来源:stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。