Docker:这个(不)工作?
我正在尝试创build一个运行sql server的docker镜像。 为此,我在Windows机器上执行了以下步骤。
-
运行一个mysql容器将一个init文件复制到虚拟机中(不确定这一步是否真的有必要):
docker run -i centurylink/mysql /bin/bash -c 'cat > table.sql' < /c/Users/bastian/Documents/docker/table.sql
-
从结果容器中创build一个图像:
docker commit ID mysql/with-table
-
运行映像以初始化数据库:
docker run -d -it -p 3306:3306 -v /c/Users/bastian/Documents/docker/mysql:/mysql -e MYSQL_DATABASE='google' -e MYSQL_USER='foo' -e MYSQL_PASSWORD='bar' MYSQL_ROOT_PASSWORD='xxx' mysql/with-table
现在我有以下的问题:
-
当我执行
docker inspect ID3
,输出包含命令:"Cmd": [ "/bin/bash", "-c", "cat \u003e table.sql" ]
这是否意味着复制命令执行,而不是MySQL服务器? 我如何看到哪个命令将被实际执行?
-
如果我尝试连接到主机上的mysql服务器:
$ boot2docker ip 2> /dev/null 192.168.59.103 $ mysql -h 192.168.59.103 -p 3306 Enter password: *** // I enter xxx here
我收到以下错误信息:
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.59.103' (10061)
任何想法可能是什么原因?
编辑:所以,我只是删除了第一步,而是直接运行centurylink / mysql映像。 如果我这样做,并将MySQL行更改为$ mysql -h 192.168.59.103 -p -u root
(或-u foo
),则连接将起作用。 因此,执行步骤1和2时,mysql行是错误的,并且mysql服务器实际上不能正确启动。 你知道这个的原因吗?
当你用docker run some_image some_command
运行容器docker run some_image some_command
,你已经给它一个命令来运行。 在你的情况下(第1步)这个命令是/bin/bash -c 'cat > table.sql'
。 然后在步骤2中,您将该命令提交给新图像。 所以你的图像运行该命令而不是mysql。
也许看看docker exec
来做点什么来初始化。 或者将数据安装为“ Docker Volume ”。