我想创建一个包含带有初始化数据库的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中创建数据库时会出现错误?谢谢!
答案 0 :(得分:1)
阅读RUN instruction的文档清楚说明:
RUN指令将在当前图像之上的新图层中执行任何命令并提交结果。生成的已提交映像将用于Dockerfile中的下一步。
因此,每个运行指令创建一个新映像并启动MySQL服务器并创建数据库应该在相同的RUN
指令中组合:
RUN service mysql start && mysqladmin -u root create mydb
这解决了它。