简短的问题。我有以下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
。
有什么想法吗?
答案 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
可以提供帮助。