首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker-machine ssh命令

docker-machine ssh命令
EN

Stack Overflow用户
提问于 2015-09-15 17:08:02
回答 2查看 1.5K关注 0票数 0

问题的设置:

创建数据卷容器

代码语言:javascript
复制
$ docker create --name dbdata -v /dbdata mongo /bin/true

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

代码语言:javascript
复制
$ docker run -d --name mongo --volumes-from dbdata mongo

验证您可以使用mongo客户端连接到mongo。

代码语言:javascript
复制
$ 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主机上,它就能工作了:

代码语言:javascript
复制
$ 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命令在一个步骤中执行上面的命令对我来说是行不通的:

代码语言:javascript
复制
$ 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可能有一个问题(应该像传入容器一样传递它,因此过早地展开导致空字符串?),但是想要正确处理它有点困难。任何想法都会受到赞赏。

更新:我又近了一步。以下内容似乎正确地执行了命令,尽管数据没有写入系统,会话挂起:

代码语言:javascript
复制
$ 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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-20 04:28:59

这个问题提出了一个基于docker ssh的解决方案,但是由于没有人回答,我会用一个更好的解决方案来回答我自己的问题。

正如Nathan在twitter上向我建议的那样,更好的解决方案是完全避免麻烦,只需运行一个容器来执行mongodump命令。

代码语言:javascript
复制
$ docker run \
    --rm \
    --link mongo:mongo \
    -v /root:/backup mongo bash \
    -c 'mongodump --out /backup --host $MONGO_PORT_27017_TCP_ADDR'

从技术上讲,答案并不是必需的,但是由此产生的test db备份文件可以通过docker scp从docker主机传输到当前目录。

代码语言:javascript
复制
$ docker-machine scp -r dev:/root/test .
票数 1
EN

Stack Overflow用户

发布于 2016-12-11 09:02:58

由于我不能向orginal nice answer添加注释,在这里添加一点说明,$MONGO_PORT_27017_TCP_ADDR应该是我们机器的ip,例如,虚拟机的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

再次感谢自然回答^_^。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32591809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档