在Docker容器中运行mysql实例

时间:2015-01-24 16:07:25

标签: mysql docker containers

我想在Docker中运行一个mysql容器。我使用的Dockerfile是官方仓库[here]中定义的Dockerfile。 我只用另外2行扩展了这个Dockerfile,所以我可以导入一个init sql文件,如下所示:

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

我希望将此实例作为守护程序运行但是当我执行此命令时,从documentation

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

容器自动退出。我想将它作为一个守护进程运行,这样我就可以将另一个容器中的应用程序(如wordpress网站)链接到mysql数据库。

也许我错过了什么。谁能告诉我怎么样?

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

Running mysql_install_db ...
Finished mysql_install_db

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

2 个答案:

答案 0 :(得分:1)

您的Dockerfile似乎很好。但是,你的init文件可能有问题。如果MySQL终止,那么容器将终止。

第一个调试步骤是查看日志:

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干净地退出,所以你没有得到日志,但命令终止。

答案 1 :(得分:0)

Dmitri,在您使用docker run参数进行-d之后,如果只有CMD命令没有返回退出代码,则容器已分离且已作为守护程序工作。

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

另外我认为你需要在容器外面打开mysql端口。您可以使用-P参数或更好的方式来实现容器之间的通信docker links