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

标签 java maven docker spring-boot docker-compose

我需要控制 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 镜像生成。

最佳答案

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

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

关于java - Docker-Compose - 控制 docker-compose 执行顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52707667/

相关文章:

docker - Docker-从工件中加载基本镜像

r - 对Docker容器使用X11转发

Java - 具有相同引用的对象池

java - java中如何从对象数组中删除元素

java - mahout 0.7中mahout 0.5中VectorWritable.addTo的等效方法是什么?

使用 Maven 的 JavaFX 11 抛出异常 : "WindowsNativeRunloopThread"

docker - 从 Docker : curl: (56) Recv failure: Connection reset by peer 运行 Jupyter Notebook

java - Tomcat 7 + JNDI 资源 + IBM WebSphere MQ

java - 如何修复Java构建路径中的SRC文件夹?

java - 无法运行 jar 文件,出现错误“无法找到或加载主类”(Maven 项目)