Docker:当我连接到mongo容器时连接EHOSTUNREACH

时间:2016-10-04 23:48:08

标签: node.js mongodb docker mongoose

我是docker的新手,我刚刚创建了MongoDB和Node.js容器。

首先,我制作并运行mongoDB容器。

$ docker run mongo
2016-10-04T07:41:12.864+0000 I CONTROL  [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=f3b51681966e
2016-10-04T07:41:12.865+0000 I CONTROL  [initandlisten] db version v3.2.10
2016-10-04T07:41:12.865+0000 I CONTROL  [initandlisten] git version: 79d9b3ab5ce20f51c272b4411202710a082d0317
2016-10-04T07:41:12.865+0000 I CONTROL  [initandlisten] OpenSSL version: OpenSSL 1.0.1t  3 May 2016
2016-10-04T07:41:12.865+0000 I CONTROL  [initandlisten] allocator: tcmalloc
2016-10-04T07:41:12.865+0000 I CONTROL  [initandlisten] modules: none
2016-10-04T07:41:12.865+0000 I CONTROL  [initandlisten] build environment:
2016-10-04T07:41:12.865+0000 I CONTROL  [initandlisten]     distmod: debian81
2016-10-04T07:41:12.865+0000 I CONTROL  [initandlisten]     distarch: x86_64
2016-10-04T07:41:12.865+0000 I CONTROL  [initandlisten]     target_arch: x86_64
2016-10-04T07:41:12.865+0000 I CONTROL  [initandlisten] options: {}
2016-10-04T07:41:12.868+0000 I STORAGE  [initandlisten] wiredtiger_open config: create,cache_size=1G,session_max=20000,eviction=(threads_max=4),config_base=false,statistics=(fast),log=(enabled=true,archive=true,path=journal,compressor=snappy),file_manager=(close_idle_time=100000),checkpoint=(wait=60,log_size=2GB),statistics_log=(wait=0),
2016-10-04T07:41:13.080+0000 I FTDC     [initandlisten] Initializing full-time diagnostic data capture with directory '/data/db/diagnostic.data'
2016-10-04T07:41:13.080+0000 I NETWORK  [HostnameCanonicalizationWorker] Starting hostname canonicalization worker
2016-10-04T07:41:13.145+0000 I NETWORK  [initandlisten] waiting for connections on port 27017

并且正如您所见,它运作良好。

> docker ps
    CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
    f3b51681966e        mongo               "/entrypoint.sh mongo"   16 hours ago        Up 11 minutes       27017/tcp           drunk_rosalind

好吧,如果我将nodejs服务器作为docker run <server-name>运行, 它打印出以下错误。

> urlcom@0.0.0 start /usr/src/app
> node ./bin/www


/usr/src/app/node_modules/mongodb/lib/server.js:242
        process.nextTick(function() { throw err; })
                                      ^
Error: connect EHOSTUNREACH 172.17.0.5:27017
    at Object.exports._errnoException (util.js:1036:11)
    at exports._exceptionWithHostPort (util.js:1059:20)
    at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1080:14)

我的app.js来源是http://pastebin.com/zR3ErQdf

任何人都可以找出问题所在?

1 个答案:

答案 0 :(得分:0)

您的mongo docker容器必须正确链接到服务器docker容器。请注意,必须首先命名mongo容器,因为--link的参数引用了NAME,而不是图像。

运行mongo docker:

docker run --name db mongo

运行Web服务器时正确引用mongo容器

docker run --name web --link db:db <server-name>

参考:https://docs.docker.com/engine/userguide/networking/default_network/dockerlinks/#/communication-across-links