运行 mysql 个实例在 Docker 容器中

Run mysql instance in Docker container

我想在 Docker 中 运行 一个 mysql 容器。我使用的Docker文件是官方repo[here]中定义的Docker文件。 我只用 2 行扩展了这个 Docker 文件,这样我就可以导入一个初始化 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

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

也许我遗漏了什么。谁能告诉我怎么做?

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

Running mysql_install_db ...
Finished mysql_install_db

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

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

您可以通过docker ps 命令检查运行 个容器。 您可以通过 运行 docker ps -a.

查看所有容器

此外,我认为您需要在容器外打开 mysql 端口。您可以使用 -P 参数或在容器之间进行通信的更好方法是 docker links.

你的 Dockerfile 似乎没问题。不过,您的 init 文件可能有问题。如果 MySQL 终止,则容器将终止。

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

docker logs some-mysql

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

如果日志没有帮助,接下来要尝试进入容器内部并亲眼看看发生了什么

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

这将使您的容器内有一个 Bash shell。那么你可以运行

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

看看会发生什么。也许您的 init 文件中的某些内容告诉 MySQL 干净退出,因此您没有收到任何日志但命令终止。