2017-07-25 44 views
1

我有一個簡單的nodeJS應用程序,它由前端和mongo數據庫組成。我想通過Docker進行部署。Docker兩層應用程序問題:無法連接到mongo容器

在我的碼頭工人,撰寫文件,我有以下幾點:

version: '2' 
services: 
    express-container: 
    build: . 
    ports: 
    - "3000:3000" 
    depends_on: 
    - mongo-container 
    mongo-container: 
    image: mongo:3.0 

當我跑碼頭工人,組成了,我有以下錯誤:

Creating todoangularv2_mongo-container_1 ... 
Creating todoangularv2_mongo-container_1 ... done 
Creating todoangularv2_express-container_1 ... 
Creating todoangularv2_express-container_1 ... done 
Attaching to todoangularv2_mongo-container_1, todoangularv2_express-container_1 
mongo-container_1 | 2017-07-25T15:26:09.863+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=25f03f51322b 
mongo-container_1 | 2017-07-25T15:26:09.864+0000 I CONTROL [initandlisten] db version v3.0.15 
mongo-container_1 | 2017-07-25T15:26:09.864+0000 I CONTROL [initandlisten] git version: b8ff507269c382bc100fc52f75f48d54cd42ec3b 
mongo-container_1 | 2017-07-25T15:26:09.864+0000 I CONTROL [initandlisten] build info: Linux ip-10-166-66-3 3.2.0-4-amd64 #1 SMP Debian 3.2.46-1 x86_64 BOOST_LIB_VERSION=1_49 
mongo-container_1 | 2017-07-25T15:26:09.864+0000 I CONTROL [initandlisten] allocator: tcmalloc 
mongo-container_1 | 2017-07-25T15:26:09.864+0000 I CONTROL [initandlisten] options: {} 
mongo-container_1 | 2017-07-25T15:26:09.923+0000 I JOURNAL [initandlisten] journal dir=/data/db/journal 
mongo-container_1 | 2017-07-25T15:26:09.924+0000 I JOURNAL [initandlisten] recover : no journal files present, no recovery needed 
express-container_1 | Listening on port 3000 
express-container_1 | 
express-container_1 | events.js:72 
express-container_1 |   throw er; // Unhandled 'error' event 
express-container_1 |    ^
express-container_1 | Error: failed to connect to [mongo-container:27017] 

所以我的前端無法到達蒙戈在docker-compose文件中稱爲'mongo-container'的容器。在應用程序本身我給的URL數據庫蒙哥如下:

module.exports = { 
    url : 'mongodb://mongo-container:27017/todo' 
} 

任何想法,這樣當它在泊塢運行我如何改變我的申請,我沒有這個連接問題?

編輯:蒙戈容器提供了以下的輸出:

WAUTERW-M-T3ZT:vagrant wim$ docker logs f63 
2017-07-26T09:15:02.824+0000 I CONTROL [initandlisten] MongoDB starting : pid=1 port=27017 dbpath=/data/db 64-bit host=f637f963c87f 
2017-07-26T09:15:02.825+0000 I CONTROL [initandlisten] db version v3.0.15 
2017-07-26T09:15:02.825+0000 I CONTROL [initandlisten] git version: b8ff507269c382bc100fc52f75f48d54cd42ec3b 
... 
2017-07-26T09:15:21.461+0000 I STORAGE [FileAllocator] done allocating datafile /data/db/local.0, size: 64MB, took 0.024 secs 
2017-07-26T09:15:21.476+0000 I NETWORK [initandlisten] waiting for connections on port 27017 

快遞容器提供了以下的輸出:

WAUTERW-M-T3ZT:vagrant wim$ docker logs 25a 
Listening on port 3000 

events.js:72 
     throw er; // Unhandled 'error' event 
      ^
Error: failed to connect to [mongo-container:27017] 
    at null.<anonymous> (/usr/src/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/server.js:555:74) 
    at EventEmitter.emit (events.js:106:17) 
    at null.<anonymous> (/usr/src/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:156:15) 
    at EventEmitter.emit (events.js:98:17) 
    at Socket.<anonymous> (/usr/src/app/node_modules/mongoose/node_modules/mongodb/lib/mongodb/connection/connection.js:534:10) 
    at Socket.EventEmitter.emit (events.js:95:17) 
    at net.js:441:14 
    at process._tickCallback (node.js:415:13) 

編輯:問題出現在Dockerfile。這裏是一個糾正一個(簡單一點,因爲我來自一個節點的圖像,而不是Ubuntu的圖像開始):

FROM node:0.10.40 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 
COPY . /usr/src/app 
RUN npm install 
CMD ["node", "/usr/src/app/bin/www"] 

回答

0

您可以通過links會議代替depends_on,表達像depends_on和服務之間的依賴關係,根據documentation,鏈接服務的容器可以在與別名相同的主機名上訪問,或者如果未指定別名,則服務名稱可以訪問。

version: '2' 
services: 
    express-container: 
    build: . 
    ports: 
    - "3000:3000" 
    links: 
    - "mongo-container" 
    mongo-container: 
    image: mongo:3.0 
+0

不要使用鏈接,這將被描述(https://docs.docker.com/engine/userguide /網絡/ default_network/dockerlinks /)。在Docker 1.9之後,通過使用容器名稱,服務發現工作正常。你的撰寫文件看起來很好,你應該能夠使用名稱在服務之間進行連接。你可以檢查「docker-compose ps」,「docker ps」和「docker logs mongo」以確保它開始正常。我認爲集裝箱沒有啓動或尚未啓動。 depends_on(https://docs.docker.com/compose/compose-file/#depends_on)不能確保服務完全運行,您需要在應用程序中對其進行管理。 – Sreeni

+0

我使用鏈接,但不起作用。事實上,我得到了同樣的錯誤。我編輯了docker日誌輸出的原始文章。 mongo容器肯定會啓動並運行,但快速容器會因爲找不到'mongo-container'而失敗。我正在使用docker-compose運行,而不是Docker Swarm或Kubernetes,所以不確定服務發現是否存在?我正在使用docker版本17.06.0-ce – wiwa1978

+0

我認爲你的mongodb容器在啓動快速容器時尚未完全啓動。爲了證明這個時間問題,你可以嘗試重新啓動失敗的快速容器,看看它是否有效。如果這不起作用,請發送兩個容器的「碼頭檢查」。 (服務發現沒有羣集。) – Sreeni

0

該問題出現在Dockerfile中。這裏是一個更正的一個(簡化了一點,因爲我從一個節點映像而不是Ubuntu映像開始):

FROM node:0.10.40 
RUN mkdir -p /usr/src/app 
WORKDIR /usr/src/app 
COPY . /usr/src/app 
RUN npm install 
CMD ["node", "/usr/src/app/bin/www"] 
相關問題