Docker:这个(不)工作?

我正在尝试创build一个运行sql server的docker镜像。 为此,我在Windows机器上执行了以下步骤。

  1. 运行一个mysql容器将一个init文件复制到虚拟机中(不确定这一步是否真的有必要):

    docker run -i centurylink/mysql /bin/bash -c 'cat > table.sql' < /c/Users/bastian/Documents/docker/table.sql 
  2. 从结果容器中创build一个图像:

     docker commit ID mysql/with-table 
  3. 运行映像以初始化数据库:

     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 

现在我有以下的问题:

  1. 当我执行docker inspect ID3 ,输出包含命令:

     "Cmd": [ "/bin/bash", "-c", "cat \u003e table.sql" ] 

    这是否意味着复制命令执行,而不是MySQL服务器? 我如何看到哪个命令将被实际执行?

  2. 如果我尝试连接到主机上的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 ”。