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

时间:2017-01-11 21:38:05

标签: 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
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

当我评论要创建数据库的行(RUN mysqladmin -u root create mydb)时,我可以构建映像,启动它,并从命令行执行mysqladmin命令:

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

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

1 个答案:

答案 0 :(得分:1)

阅读RUN instruction的文档清楚说明:

  

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

因此,每个运行指令创建一个新映像并启动MySQL服务器并创建数据库应该在相同的RUN指令中组合:

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

这解决了它。