Docker-Compose-控制docker-compose执行顺序

时间:2018-10-08 17:52:29

标签: java maven docker spring-boot docker-compose

我需要控制Docker容器实例化的顺序,问题是我想用Docker maven容器构建一个Jar文件,然后将该jar传递给OpenJDK Docker容器以构建映像,然后实例化MongoDB容器和带有OpenJDK映像的Java-App容器,之前通过docker-compose在它们之间进行通信。

问题在于,构建总是会失败,因为某些单元测试会在初始化之前与数据库对话,并且由于测试失败,构建也会失败。

这是我的dockerfile:

FROM maven:3.5-alpine
COPY ./ /app
RUN cd /app && mvn package

FROM openjdk:8
COPY spring-rest-iw-exam.jar /tmp/spring-rest-iw-exam.jar
EXPOSE 8087
ENTRYPOINT ["java", "-jar", "/tmp/spring-rest-iw-exam.jar"]

这是我的Docker-Compose:

version: '2'
services:
  mongodb:
    image: mongo
    container_name: iw_exam_mongo
    restart: always
    ports:
    - "27017:27017"
    environment:
    - MONGO_INITDB_DATABASE=fizz_buzz_collection
    volumes:
    - /opt/iw-exam/data:/data/db
  spring-app:
    container_name: iw_exam_java_rest_api
    build: ./
    restart: always
    ports:
    - "8087:8087"
    depends_on:
    - mongodb

我尝试了depends_on,并使用了一个名为dockerize的工具进行了其他测试,但均无济于事,Maven构建总是在docker-compose甚至开始实例化mongodb之前就开始了。

这是proyect的github存储库: https://github.com/dsalasboscan/exam

我需要首先实例化Mongodb,然后从Maven构建和Java映像生成开始。

1 个答案:

答案 0 :(得分:1)

我之前遇到过类似的问题,并希望分享我的经验。

基本上,我们需要等待一段时间以确保mongodb完全启动,这是您可以利用的tool。相当容易使用。