【问题标题】:Docker-Compose - Control docker-compose execution orderDocker-Compose - 控制 docker-compose 执行顺序
【发布时间】:2019-03-13 10:38:30
【问题描述】:

我需要控制 Docker 容器实例化的顺序,问题是我想用 Docker maven 容器构建一个 Jar 文件,然后将该 jar 传递给 OpenJDK Docker 容器以构建映像,然后实例化 MongoDB容器和一个 Java-App 容器,其中包含之前生成的 OpenJDK 映像,它们之间通过 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之前开始。

这是项目的github仓库: https://github.com/dsalasboscan/exam

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

【问题讨论】:

  • “一些单元测试与数据库对话”:您会在各种自动构建情况下遇到此类问题,而不仅仅是与 Docker 相关的事情。如果可以的话,我建议将测试拆分为(独立)单元测试和集成测试。您也不需要在构建部署映像时运行测试,这也可以帮助您解决这个问题。
  • 使用depends_on控制启动顺序,并使用一些wait-for-it解决方案检查mongodb容器内的db服务是否正在运行,然后再启动其余的。

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


【解决方案1】:

我以前也遇到过类似的问题,想分享一下我的经验。

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

【讨论】:

    猜你喜欢
    • 2019-10-22
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 2018-05-05
    • 2019-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多