Docker MySQL主机卷

我发现这里有一个官方的MySQL镜像。 不幸的是,我无法使用主机卷启动容器。 我已经尝试了下面的脚本。

DB_ROOT_PASS="myPassword" DB_NAME="myDatabase" DATA_DIR="$HOME/mysql_data" mkdir -p $DATA_DIR mkdir -p $DATA_DIR/conf.d cd $DATA_DIR wget -O my.cnf http://pastebin.com/raw.php?i=aV4pXRQD sudo docker run \ -e MYSQL_ROOT_PASSWORD=$DB_ROOT_PASS \ -e MYSQL_DATABASE=$DB_NAME \ -p 3306:3306 \ -v $DATA_DIR:/etc/mysql \ mysql 

这导致了以下输出:

 Running mysql_install_db ... Installing MySQL system tables...2015-02-14 07:49:52 0 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead. 2015-02-14 07:49:52 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). OK Filling help tables...2015-02-14 07:49:55 0 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead. 2015-02-14 07:49:55 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h 2efc65e86051 password 'new-password' Alternatively you can run: /usr/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. See the manual for more instructions. You can start the MySQL daemon with: cd /usr ; /usr/bin/mysqld_safe & You can test the MySQL daemon with mysql-test-run.pl cd mysql-test ; perl mysql-test-run.pl Please report any problems at http://bugs.mysql.com/ The latest information about MySQL is available on the web at http://www.mysql.com Support MySQL by buying support/licenses at http://shop.mysql.com WARNING: Found existing config file /usr/my.cnf on the system. Because this file might be in use, it was not replaced, but was used in bootstrap (unless you used --defaults-file) and when you later start the server. The new default config file was created as /usr/my-new.cnf, please compare it with your file and take the changes you need. WARNING: Default config file /etc/mysql/my.cnf exists on the system This file will be read by default by the MySQL server If you do not want to use this, either remove it, or use the --defaults-file argument to mysqld_safe when starting the server Finished mysql_install_db 2015-02-14 07:49:57 0 [Warning] Using unique option prefix key_buffer instead of key_buffer_size is deprecated and will be removed in a future release. Please use the full name instead. 2015-02-14 07:49:57 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 

我也试过不创buildconf.d目录或导致其他错误的my.cnf文件。

为什么需要一个卷?

主机卷提供“接近金属”的磁盘性能以及对MySQL数据库非常重要的数据持久性。 因此,从容器中备份数据或使用“数据容器”模式是不期望的。

题:

我如何更新脚本,以启动一个主机卷,使MySQL服务启动正确的Docker MySQL容器? 也许传递一个初始化脚本或增加更多的数据到卷?

上下文

  • Ubuntu 14.04 64位服务器
  • Docker版本1.5.0,构builda8a31ef

有几个问题,主要的一个问题是被下载的原始configuration文件有一个bind-address设置,导致mysql服务无法从主机外部连接。 我已经更新了设置(注释掉)并使服务正常运行,但service mysql status仍然表明MySQL Community Server 5.6.23 is not running. 即使它是。 我99%肯定这是因为“集装箱化”的影响。

而且,数据并不保存在/etc/mysql ,所以为了实现持久性和更高的性能,我们需要添加另一个卷。 最终的工作脚本是这样的:

 DB_ROOT_PASS="myPassword" DB_NAME="myDatabase" CONFIG_DIR="$HOME/mysql_config" DATA_DIR="$HOME/mysql_data" mkdir -p $DATA_DIR mkdir -p $CONFIG_DIR mkdir -p $CONFIG_DIR/conf.d cd $CONFIG_DIR sudo wget -O my.cnf http://pastebin.com/raw.php?i=aV4pXRQD sudo docker run \ -e MYSQL_ROOT_PASSWORD=$DB_ROOT_PASS \ -e MYSQL_DATABASE=$DB_NAME \ -p 3306:3306 \ -v $CONFIG_DIR:/etc/mysql \ -v $DATA_DIR:/var/lib/mysql \ -d \ mysql 

你看到这个消息的原因

 MySQL Community Server 5.6.23 is not running. 

是因为命令ps没有加载到这个容器中。 service mysql status命令(和所有服务状态命令)依赖于ps来检查状态。

当我运行service mysql status ,我得到的完整消息是:

 /etc/init.d/mysql: line 41: ps: command not found MySQL Community Server 5.6.23 is not running. 

事实上,如果我尝试直接运行PS我得到

 bash: ps: command not found 

不确定为什么他们没有在这个容器中提供ps,可能值得在这个容器上打开一个问题。