Docker等待Web应用程序启动(依赖)

时间:2016-12-25 22:02:15

标签: node.js docker docker-compose

简短的问题。我有以下Dockerfile:

FROM node:6.9.2

RUN apt-get update

RUN useradd --user-group --create-home --shell /bin/false app

ENV HOME=/home/app

RUN mkdir -p $HOME
RUN chown -R app:app $HOME

USER app
WORKDIR $HOME/

VOLUME ["/home/app/uploads"]

EXPOSE 5001

CMD [ "npm", "run", "test-integration" ]

和相应的docker-compose:     版本:'2.0'

services:
  komed-test-integration:
    image: borntraegermarc/komed-test-integration
    container_name: komed-test-integration
    build: .
    depends_on:
      - komed-app
      - komed-mongo
    volumes:
      - .:/home/app
    environment:
      - HOST_URL=komed-app
      - HOST_PORT=5001
      - MONGO_HOST=komed-mongo
      - MONGO_DATABASE=komed-health

我在我的撰写文件中依赖于komed-app并且工作正常。但是,如果Web服务器(komed-app)实际运行,我该如何等待这些集成测试?试过CMD [ "./wait-for-it.sh", "komed-app-test:5001", "--", "npm", "run", "test-integration" ]但没有用。始终收到错误exited with code 127

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

Controlling startup order in Compose中描述了最佳做法。

你可以使用depends-on或(更好)vishnubob/wait-for-it(你做过) 当超时失败时,在this issue中提到了127。

Docker node 6.9.2取决于jessie,而不是Alpine,因此它不应受issue 6影响:因此请尝试调试脚本,方法是将-x添加到first line

 #!/usr/bin/env bash -x

您将看到哪个exit $RESULT生成了127错误代码。

OP Marc Borni确认in the comments问题的根源:unix脚本的Windows文件编码。
有时,using dos2unix directly in a Dockerfile可以提供帮助。