【问题标题】:Run mysql instance in Docker container在 Docker 容器中运行 mysql 实例
【发布时间】:2015-01-24 16:07:25
【问题描述】:

我想在 Docker 中运行一个 mysql 容器。我使用的Dockerfile是官方repo[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 守护进程没有启动。

【问题讨论】:

    标签: mysql docker containers


    【解决方案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 干净地退出,因此您不会得到任何日志,但命令会终止。

    【讨论】:

    • 我编辑我的问题。我稍后会尝试你的建议
    • 您使用docker run 提供的命令不会启动任何shell。正常吗?
    • 那么也许你的 dockerfile 比你发布的要多。当我运行docker run -it mysql:latest /bin/bash 时,我在 mysql 容器上获得了一个 shell。
    • 嗨,你能确认这个 Dockerfile 启动了 mysqld 守护进程吗? github.com/docker-library/mysql/blob/…
    • 可以执行这个命令docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=mysecretpassword -d mysql进行确认吗?
    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 2014-09-24
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-07
      • 1970-01-01
      相关资源
      最近更新 更多