【发布时间】:2014-11-13 05:29:16
【问题描述】:
我正在尝试为我的 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命令都在不同的容器中执行。这里解释得很好:stackoverflow.com/questions/17891669/… -
这只是说明 RUN 命令有不同的上下文。但我依赖的是一个守护进程,而不是上下文。
-
是的,但这解释了为什么您无法连接到 MySQL。这是因为,它只在您的第一行
RUN中运行。 -
要执行你的SQL语句,你需要启动MySQL,并在同一个容器中使用MySQL客户端:一个
RUN,分几步。您可以在此处找到一个多步骤安装软件的示例:stackoverflow.com/questions/25899912/install-nvm-in-docker/… -
您也可以使用 docker-compose 查看服务:docs.docker.com/compose/wordpress/#build-the-project 这样,mysql 可以附加到您的应用中