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
可以提供帮助。