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

简短的问题。 我有以下的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的依赖项,并且工作正常。 但是,我如何等待这些集成testing才能启动,直到Web服务器( komed-app )实际运行? 试用CMD [ "./wait-for-it.sh", "komed-app-test:5001", "--", "npm", "run", "test-integration" ]但是没有工作。 始终exited with code 127错误。

有任何想法吗?

在Compose中控制启动顺序中介绍了最佳实践。

你可以使用depends-on或(更好) vishnubob/wait-for-it (你做的)。
在这个问题中提到127,超时失败。

Docker节点6.9.2依赖于jessie,而不是Alpine,所以它不应该受到问题6的影响:所以尝试和debugging脚本,在第一行添加-x

  #!/usr/bin/env bash -x 

你会看到哪个exit $RESULT产生了127错误代码。

OP Marc Borni 在评论中证实了这个问题的根源:windows文件编码为unix脚本。
有时, 直接在Dockerfile使用dos2unix可以提供帮助。