我想在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守护程序无法启动。
答案 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。