Docker:这个(不)如何工作?

时间:2014-12-18 09:16:42

标签: docker boot2docker mysql

我正在尝试创建一个运行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. 从生成的容器中创建图像:

    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
    
  4. 现在我有以下问题:

    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)
      

      知道原因可能是什么?

    3. 编辑:所以,我刚刚删除了第一步,而是直接运行了centurylink / mysql映像。如果我这样做并将mysql行更改为$ mysql -h 192.168.59.103 -p -u root(或-u foo),则连接有效。因此,当执行步骤1和2时,mysql行是错误的并且实际上没有正确启动mysql服务器。你知道这个的原因吗?

1 个答案:

答案 0 :(得分:1)

当您使用docker run some_image some_command运行容器时,您已经给它一个运行命令。在您的情况下(步骤1),此命令为/bin/bash -c 'cat > table.sql'。然后在步骤2中,您将该命令提交给新映像。所以你的图像运行该命令而不是mysql。

也许看看docker exec进行初步的初始化。或者将数据装入&#39; Docker Volume&#39;。