我正在尝试创建一个运行sql server的docker镜像。为此,我在Windows机器上执行了以下步骤。
运行mysql容器将init文件复制到虚拟机中(不确定此步骤是否真的有必要):
docker run -i centurylink/mysql /bin/bash -c 'cat > table.sql' < /c/Users/bastian/Documents/docker/table.sql
从生成的容器中创建图像:
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服务器。你知道这个的原因吗?
答案 0 :(得分:1)
当您使用docker run some_image some_command
运行容器时,您已经给它一个运行命令。在您的情况下(步骤1),此命令为/bin/bash -c 'cat > table.sql'
。然后在步骤2中,您将该命令提交给新映像。所以你的图像运行该命令而不是mysql。
也许看看docker exec
进行初步的初始化。或者将数据装入&#39; Docker Volume&#39;。