docker-compose忽略depends_onbuild立的启动顺序

我有一个docker-compose.yml有三个服务:Node应用程序,Mongo数据库和waisbrot /等待 Mongo服务器在启动应用程序之前开始监听。

当我运行docker-compose up ,compose立即开始构build和启动应用程序服务,而不是首先启动它的依赖关系。 我没有输出在控制台build议撰写试图启动任何其他容器。

由于应用程序服务器无法连接到Mongo时崩溃,堆栈无法启动。

这是我docker-compose.yml

 version: '2' services: wait: image: waisbrot/wait depends_on: - mongo environment: - TARGETS=mongo:27017 app: build: . depends_on: - wait mongo: image: mongo:3.2 volumes: - /data/db 

我的意图是先启动mongo服务,然后启动等待服务,启动应用程序。 看着输出,甚至观看docker stats ,似乎只有应用程序服务正在启动。 这是docker-compose up的输出docker-compose up

 Building app Step 1 : FROM node:6.6 ---> c0d8845263e3 Step 2 : COPY ./package.json /app/package.json ---> Using cache ---> db47c6c65663 Step 3 : WORKDIR /app/ ---> Using cache ---> 30c3cadc2680 Step 4 : RUN npm i ---> Using cache ---> 5ae6a18b2100 Step 5 : COPY ./src/ /app/src/ ---> Using cache ---> dd64329a5fe2 Step 6 : COPY ./config/ /app/config/ ---> Using cache ---> 1945706cdaac Step 7 : COPY ./public/ /app/public/ ---> Using cache ---> af6f6b7075c1 Step 8 : EXPOSE 3030 ---> Using cache ---> 4ecec8df6ef7 Step 9 : RUN npm start ---> Running in 04a543b58d85 npm info it worked if it ends with ok npm info using npm@3.10.3 npm info using node@v6.6.0 npm info lifecycle family-communication@0.0.0~prestart: family-communication@0.0.0 npm info lifecycle family-communication@0.0.0~start: family-communication@0.0.0 > family-communication@0.0.0 start /app > node src/ Feathers application started on localhost:3030 /app/node_modules/mongodb/lib/server.js:261 process.nextTick(function() { throw err; }) ^ MongoError: failed to connect to server [mongo:27017] on first connect at Pool.<anonymous> (/app/node_modules/mongodb-core/lib/topologies/server.js:313:35) at emitOne (events.js:96:13) at Pool.emit (events.js:188:7) at Connection.<anonymous> (/app/node_modules/mongodb-core/lib/connection/pool.js:260:12) at Connection.g (events.js:291:16) at emitTwo (events.js:106:13) at Connection.emit (events.js:191:7) at Socket.<anonymous> (/app/node_modules/mongodb-core/lib/connection/connection.js:162:49) at Socket.g (events.js:291:16) at emitOne (events.js:96:13) at Socket.emit (events.js:188:7) at connectErrorNT (net.js:1015:8) at _combinedTickCallback (internal/process/next_tick.js:74:11) at process._tickCallback (internal/process/next_tick.js:98:9) npm info lifecycle family-communication@0.0.0~start: Failed to exec start script npm ERR! Linux 4.4.20-moby npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "start" npm ERR! node v6.6.0 npm ERR! npm v3.10.3 npm ERR! code ELIFECYCLE npm ERR! family-communication@0.0.0 start: `node src/` npm ERR! Exit status 1 npm ERR! npm ERR! Failed at the family-communication@0.0.0 start script 'node src/'. npm ERR! Make sure you have the latest version of node.js and npm installed. npm ERR! If you do, this is most likely a problem with the family-communication package, npm ERR! not with npm itself. npm ERR! Tell the author that this fails on your system: npm ERR! node src/ npm ERR! You can get information on how to open an issue for this project with: npm ERR! npm bugs family-communication npm ERR! Or if that isn't available, you can get their info via: npm ERR! npm owner ls family-communication npm ERR! There is likely additional logging output above. npm ERR! Please include the following file with any support request: npm ERR! /app/npm-debug.log ERROR: Service 'app' failed to build: The command '/bin/sh -c npm start' returned a non-zero code: 1 

为什么这不像我所期望的那样工作?

 RUN npm start 

Dockerfile中的这个命令实际上是在构build时启动你的web服务器,当其他容器不存在的时候。 可能你想要的

 CMD npm start