在Dockerfile中创建MySQL数据库时出错

在Dockerfile中创建MySQL数据库时出错,mysql,docker,Mysql,Docker,我想创建一个简单的容器,其中包含一个带有初始化数据库的MySQL服务器。我的Dockerfile当前看起来如下所示: FROM ubuntu:16.10 RUN apt-get update # install MySQL; root user with no password ENV DEBIAN_FRONTEND noninteractive RUN apt-get install -y mysql-server mysql-client RUN service mysql start

我想创建一个简单的容器,其中包含一个带有初始化数据库的MySQL服务器。我的Dockerfile当前看起来如下所示:

FROM ubuntu:16.10

RUN apt-get update

# install MySQL; root user with no password
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get install -y mysql-server mysql-client

RUN service mysql start
RUN mysqladmin -u root create mydb

CMD [ "bash" ]
但是,当我通过
docker build-t mysql test构建映像时。
我得到以下错误:

Step 7 : RUN mysqladmin -u root create mydb
 ---> Running in a35c3d176d4f
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)'
Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
The command '/bin/sh -c mysqladmin -u root create mydb' returned a non-zero code: 1
当我注释要创建数据库的行时(
运行mysqladmin-u root create mydb
),我可以构建映像,启动它,并从命令行执行mysqladmin命令:

# this works
> docker run -it mysql-test
root@...> service mysql start
root@...> mysqladmin -u root create mydb

为什么在Dockerfile中创建数据库时会出现错误?谢谢大家!

阅读的文档说明:

RUN指令将在当前图像顶部的新层中执行任何命令,并提交结果。生成的提交映像将用于Dockerfile中的下一步

因此,每个run指令都会创建一个新映像,启动MySQL服务器和创建数据库应该组合在同一个
run
指令中:

RUN service mysql start && mysqladmin -u root create mydb

这就解决了问题。

我相信这个问题已经解决了。请看这里可能的重复,我试图重新表述一下这个问题:我不知道这个错误是如何在另一个问题中解决的Docker不是虚拟机。它没有运行正常的初始化系统。服务mysql启动不是正确的方法。如果需要流程主管,则必须安装/配置自己的流程主管。