docker-machine ssh命令为mongodump

设置问题:

创build一个数据卷容器

$ docker create --name dbdata -v /dbdata mongo /bin/true 

在链接到数据卷容器的容器中启动mongo

 $ docker run -d --name mongo --volumes-from dbdata mongo 

validation你可以使用mongo客户端连接到mongo

 $ docker run -it --link mongo:mongo --rm mongo sh -c 'exec mongo "$MONGO_PORT_27017_TCP_ADDR:$MONGO_PORT_27017_TCP_PORT/test"' 

问题:

docker-machine ssh需要一个host和一个command参数在主机上执行。 我想要执行下面的mongodump命令,该命令在ssh进入docker主机后工作:

 $ docker-machine ssh demo root@demo:~# docker run --rm --link mongo:mongo -v $HOME:/backup mongo bash -c 'mongodump --out /backup --host $MONGO_PORT_27017_TCP_ADDR' 2015-09-15T16:34:02.676+0000 writing test.samples to /backup/test/samples.bson 2015-09-15T16:34:02.678+0000 writing test.samples metadata to /backup/test/samples.metadata.json 2015-09-15T16:34:02.678+0000 done dumping test.samples (1 document) 2015-09-15T16:34:02.679+0000 writing test.system.indexes to /backup/test/system.indexes.bson 

但是,使用docker-machine ssh命令在一个步骤中执行上述命令不适用于我:

 $ docker-machine ssh demo -- docker run --rm --link mongo:mongo -v $HOME:/backup mongo bash -c 'mongodump --out /backup --host $MONGO_PORT_27017_TCP_ADDR' SSH cmd error! command: docker run --rm --link mongo:mongo -v /Users/tony:/backup mongo bash -c mongodump --out /backup --host $MONGO_PORT_27017_TCP_ADDR err : exit status 1 output : 2015-09-15T16:53:07.717+0000 Failed: error connecting to db server: no reachable servers 

所以,如果运行mongodump命令的容器无法连接到mongo容器,我认为可能是--host $MONGO_PORT_27017_TCP_ADDR (它应该按原样传入容器,所以过早扩展导致空string? ,但有点难倒,试图让它正确。 任何想法都表示赞赏。


更新:我更近了一步。 以下内容似乎正确地执行该命令,虽然数据不写入系统并会话挂起:

 $ docker-machine ssh demo -- $(docker run --rm --link mongo:mongo -v $HOME:/backup mongo bash -c 'mongodump --out /backup --host $MONGO_PORT_27017_TCP_ADDR') 2015-09-15T18:02:03.347+0000 writing test.samples to /backup/test/samples.bson 2015-09-15T18:02:03.349+0000 writing test.samples metadata to /backup/test/samples.metadata.json 2015-09-15T18:02:03.349+0000 done dumping test.samples (1 document) 2015-09-15T18:02:03.350+0000 writing test.system.indexes to /backup/test/system.indexes.bson 

这个问题要求提供基于docker ssh的解决scheme,但是由于没有人回答,我将自己用什么更好的解决scheme来回答这个问题。

正如Nathan LeClaire(@upthecyberpunks)向我推荐的,更好的解决scheme是完全避免这个麻烦,只需运行一个容器来执行mongodump命令。

 $ docker run \ --rm \ --link mongo:mongo \ -v /root:/backup mongo bash \ -c 'mongodump --out /backup --host $MONGO_PORT_27017_TCP_ADDR' 

没有技术上需要的答案,但由此产生的testing数据库备份文件,然后可以通过docker scp从docker主机传输到您当前的目录:

 $ docker-machine scp -r dev:/root/test . 

由于我不能在原始的好的答案中添加注释,只需在这里添加一点解释, $MONGO_PORT_27017_TCP_ADDR应该是我们机器的ip,例如,我的virtualbox中的虚拟机ip是100.100.100.10 ,所以最后一行是be :

-c 'mongodump --out /backup --host 100.100.100.10'或者

-c 'mongodump --out /backup --host 100.100.100.10:27017'

如果不添加host字段,很可能会遇到如下错误: *** Failed: error connecting to db server: no reachable servers

并再次感谢原始答案^ _ ^。

Interesting Posts