在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
参数或更好的方式来做到容器之间的通信是泊坞窗的链接 。