docker-mongodump 的机器 ssh 命令
docker-machine ssh command for mongodump
问题的设置:
创建数据卷容器
$ docker create --name dbdata -v /dbdata mongo /bin/true
在链接到数据卷容器的容器中启动mongo
$ docker run -d --name mongo --volumes-from dbdata mongo
验证您可以使用 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
可能存在问题(它应该按原样传递到容器中,所以过早扩展会导致空字符串?),但在尝试正确处理时有点难过。任何想法表示赞赏。
更新:我更近了一步。尽管数据未写入系统且会话挂起,但以下命令似乎可以正确执行:
$ 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
提出解决方案,但由于没有人回答,所以我会自己回答这个问题,不管怎样,有什么更好的解决方案。
正如 Nathan LeClaire (@upthecyberpunks) 在推特上向我建议的那样,更好的解决方案是完全避免麻烦,只需 运行 一个容器来执行 mongodump
命令。
$ docker run \
--rm \
--link mongo:mongo \
-v /root:/backup mongo bash \
-c 'mongodump --out /backup --host $MONGO_PORT_27017_TCP_ADDR'
答案在技术上不需要,但是生成的测试数据库备份文件可以通过 docker scp
:
从 docker 主机传输到您的当前目录
$ docker-machine scp -r dev:/root/test .
由于我无法在中添加注释,这里稍微说明一下,$MONGO_PORT_27017_TCP_ADDR
应该是我们机器的ip,比如我的virtualbox中的虚拟机ip是100.100.100.10
,所以最后一行应该是:
-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
.
再次感谢原回答^_^。
问题的设置:
创建数据卷容器
$ docker create --name dbdata -v /dbdata mongo /bin/true
在链接到数据卷容器的容器中启动mongo
$ docker run -d --name mongo --volumes-from dbdata mongo
验证您可以使用 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
可能存在问题(它应该按原样传递到容器中,所以过早扩展会导致空字符串?),但在尝试正确处理时有点难过。任何想法表示赞赏。
更新:我更近了一步。尽管数据未写入系统且会话挂起,但以下命令似乎可以正确执行:
$ 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
提出解决方案,但由于没有人回答,所以我会自己回答这个问题,不管怎样,有什么更好的解决方案。
正如 Nathan LeClaire (@upthecyberpunks) 在推特上向我建议的那样,更好的解决方案是完全避免麻烦,只需 运行 一个容器来执行 mongodump
命令。
$ docker run \
--rm \
--link mongo:mongo \
-v /root:/backup mongo bash \
-c 'mongodump --out /backup --host $MONGO_PORT_27017_TCP_ADDR'
答案在技术上不需要,但是生成的测试数据库备份文件可以通过 docker scp
:
$ docker-machine scp -r dev:/root/test .
由于我无法在$MONGO_PORT_27017_TCP_ADDR
应该是我们机器的ip,比如我的virtualbox中的虚拟机ip是100.100.100.10
,所以最后一行应该是:
-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
.
再次感谢原回答^_^。