在Docker容器中运行mysql实例

我想在Docker中运行一个mysql容器。 我使用的Dockerfile是在官方repo [这里]定义的Dockerfile。 我只扩展了这个Dockerfile 2行,所以我可以导入一个init的sql文件,像这样:

ADD my-init-file.sql /my-init-file.sql CMD ["mysqld", "--init-file=/my-init-file.sql"] 

我想运行这个实例作为守护进程,但是当我执行这个命令,从文档 :

 docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql 

容器自动退出。 我想运行它作为一个守护进程,所以我可以链接到另一个容器的应用程序(如WordPress的网站)到MySQL数据库。

也许我错过了一些东西。 任何人都可以告诉我如何?

[编辑]我忘了说,我启动docker logs my-container后运行docker logs my-container ,并没有错误:

 Running mysql_install_db ... Finished mysql_install_db 

docker ps显示没有正在运行的容器。 我的猜测是这个命令执行成功,但是mysqld守护进程没有启动。

你的Dockerfile看起来不错。 虽然你的初始化文件可能是马车。 如果MySQL终止,那么容器将终止。

第一个debugging步骤是查看日志:

 docker logs some-mysql 

无论容器是停止还是运行,都可以使用它。 希望你会看到一些明显的东西,比如你错过了一些分号。

如果日志没有帮助,接下来要做的就是进入容器,看看第一手的情况

 docker run -e MYSQL_ROOT_PASSWORD=mysecretpassword -it mysql /bin/bash 

这将让你在你的容器内的Bash shell。 那你可以跑了

 mysqld --init-file=/my-init-file.sql 

看看会发生什么 也许你的init文件中的东西告诉MySQL干净地退出,所以你没有日志,但命令终止。

Dmitri,当你使用-d参数docker run docker之后,你的容器被分离,并且已经作为守护进程工作,如果只有CMD命令没有返回退出代码的话。

您可以通过docker ps命令检查正在运行的容器。 您可以通过运行docker ps -a来检查所有容器。

另外我想你将需要在容器外部打开mysql端口。 你可以用-P参数或更好的方式来做到容器之间的通信是泊坞窗的链接 。