我有一個簡單的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"]
不要使用鏈接,這將被描述(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
我使用鏈接,但不起作用。事實上,我得到了同樣的錯誤。我編輯了docker日誌輸出的原始文章。 mongo容器肯定會啓動並運行,但快速容器會因爲找不到'mongo-container'而失敗。我正在使用docker-compose運行,而不是Docker Swarm或Kubernetes,所以不確定服務發現是否存在?我正在使用docker版本17.06.0-ce – wiwa1978
我認爲你的mongodb容器在啓動快速容器時尚未完全啓動。爲了證明這個時間問題,你可以嘗試重新啓動失敗的快速容器,看看它是否有效。如果這不起作用,請發送兩個容器的「碼頭檢查」。 (服務發現沒有羣集。) –
Sreeni