Docker用`/ bin / bash -c`运行mysql deamon

时间:2016-08-19 13:28:16

标签: mysql linux bash docker

我正在尝试mysql容器。该容器的CMD参数为mysqld。因此,以下参数是相同的。

docker run --name db -e MYSQL_ROOT_PASSWORD=proot --rm mysql
docker run --name db -e MYSQL_ROOT_PASSWORD=proot --rm mysql mysqld

现在,当我想使用多个命令时问题就到了。要在docker容器中使用多个命令,必须使用/bin/bash -c。我只使用mysqld命令来举例说明:

docker run --name db -e MYSQL_ROOT_PASSWORD=proot --rm mysql /bin/bash -c "mysqld"

此命令会引发以下错误。

mysqld: Table 'mysql.plugin' doesn't exist

然后mysql deamon停止了,我不明白原因。

我想使用/bin/bash -c语法,因为我想使用多个命令,例如首先启动deamon,然后使用其他mysqld & some other command。我不想创建另一个容器作为此问题的解决方法。

旁注:我正在使用--rm因为我正在排除故障,否则我会使用-d来分离容器。

2 个答案:

答案 0 :(得分:0)

虽然mysql Docker镜像的CMDmysqld,但它也有ENTRYPOINT ["docker-entrypoint.sh"],这可能与你的bash命令不兼容。

运行另一个进程会在某种程度上破坏使用此映像的意义,除了不是Docker容器的最佳实践之外,使其更不可变且更难调试,因此我不会真正使用另一个容器调用"替代方法" - 你正在尝试做的更多是解决方法。

因此,您可能需要覆盖ENTRYPOINT或创建自定义Dockerfile。

答案 1 :(得分:0)

我得到了answer from the github community。他们说 entyrypoint脚本只执行 initdb 如果 mysqld 是参数 。如上所述,解决方法是使用/docker-entrypoint-initdb.d/放置任何.sh.sql个文件,然后在mysql运行后运行文件。

因此,最后的答案是添加目录-v /local/dir:/docker-entrypoint-initdb.d/以及要初始化的脚本。举个例子:

docker run --name db -v $(pwd):/docker-entrypoint-initdb.d/ -e MYSQL_ROOT_PASSWORD=proot --rm mysql