2014-07-10 61 views
6

使用这个tutum-docker-mysql dockerfile来启动并运行一个dockerfile,并在其中安装了mysql的docker image,docker文件创建一个名为root并且没有密码的用户,我需要的是添加像这样的dockerfile:使用dockerfile在mysql中创建一个默认数据库

RUN mysql -uroot -p"" && mysql create database test; 

所以,当我建立从泊坞窗文件的图像,数据库应该已经在那里了。

+0

当您尝试这会发生什么 实例? – Behe

+0

我尝试了几个命令,并得到diff错误,我试图mysql -uroot“创建数据库测试”,错误是:错误2002(HY000):无法通过套接字'/ var/run/mysqld连接到本地MySQL服务器/mysqld.sock'(2) – Mohammad

+0

还试过mysqld -uroot -p“”“创建数据库测试”,错误是:140710 10:12:28 [警告]使用唯一选项前缀key_buffer而不是key_buffer_size已被弃用,并且将在未来的版本中被删除。请改用全名。 – Mohammad

回答

11

通过执行以下操作,我能够完成向tutum-docker-mysql映像添加数据库的目标。

git clone https://github.com/tutumcloud/tutum-docker-mysql.git 
cd tutum-docker-mysql 
vi create_mysql_admin_user.sh 

在.sh文件里面我在两个已经存在的“mysql -uroot”行的下面添加了一行。我简单地补充说:

mysql -uroot -e "create database test;" 

之后,更改为该.sh文件,我简单地构建了泊坞窗图像。

docker run -d -p 3307:3306 tutum/mysql 

一旦容器运行,你需要知道使用密码和容器的IP地址:

docker build -t tutum/mysql . 

泊坞窗图像建成后,我可以像运行。要获取密码,你只需做

docker logs 2976a81f1a9b19787d9bde893c831b7e6586d7c8391ccd222ad29b02c282d896 

但当然使用容器ID,这是从上面的“docker run”命令返回的。现在你有密码,你需要IP地址。我通过这样做了。

docker inspect 2976a81f1a9b19787d9bde893c831b7e6586d7c8391ccd222ad29b02c282d896 

然后看着“网关”地址。有了密码和IP地址,我就可以从容器的OUTSIDE中执行这个mysql命令。

mysql -uadmin -pJcM5FCphMOp4 -h172.17.42.1 -P3307 

其中ip地址和密码是我从前两个docker命令获得的值。在该命令运行后,我可以发出一个“show databases”命令并显示以下结果。

mysql> show databases; 
+--------------------+ 
| Database   | 
+--------------------+ 
| information_schema | 
| mysql    | 
| performance_schema | 
| test    | 
+--------------------+ 
4 rows in set (0.00 sec) 

mysql> 

我花了一段时间尝试修改Dockerfile。我认为这可能是可能的,但过了一段时间,我发现上述解决方案更快更简单。

3

您可以在容器启动时传递ON_CREATE_DB env参数。从tutum README.md

docker run -d -p 3306:3306 -e ON_CREATE_DB="newdatabase" tutum/mysql