1

我正在为两个服务使用 docker-compose 文件。一个用于 React App,另一个用于 Nginx 服务器。我正在使用 Jenkins 定期构建(15 分钟周期)。在詹金斯的构建部分,我执行命令docker-compose up --build。但问题是,每当 jenkins 开始构建时,尽管两个容器在开始构建几分钟后已经启动,但它需要无限的时间才能完成。由于未完成第一个构建,另一个构建作为待处理进入队列。

现在我的问题是如何在容器启动时完成构建过程。

码头工人撰写

version: "3"
services:
  react-app:
    container_name: frontend_app
    build:
      context: .
      dockerfile: ./Dockerfile
    image: frontend_app:dev 
    tty: true
    volumes:
      - my_host_vol:/app/build/      
    networks:
      - frontend_network

  nginx-server:    
    image: nginx_for_frontend:dev
    container_name: nginx_for_frontend
    tty: true
    build:
      context: ./nginx
      dockerfile: Dockerfile
    # restart: on-failure

    volumes:
      - .:/my_frontend_server
      - my_host_vol:/var/www/html/      

    ports:
      - 80:80
    depends_on:
      - react-app
    networks:
      - server_network

networks:
  frontend_network:
    driver: bridge
  server_network:
    driver: bridge


volumes:
  my_host_vol:

React 应用程序的 Dockerfile

FROM node:10.16.3

RUN mkdir /app

WORKDIR /app

COPY . /app

ENV PATH /app/node_modules/.bin:$PATH

RUN npm install --silent
RUN npm install react-scripts@3.0.1 -g --silent
RUN npm run-script build

用于 nginx 的 Dockerfile

FROM nginx:1.16.1-alpine

RUN rm /etc/nginx/conf.d/default.conf
COPY /prod.conf /etc/nginx/conf.d

构建过程的Jenkins控制台截图

在此处输入图像描述

4

2 回答 2

1

最后我找到了解决方案

如果我以分离模式 (-d) 运行我的撰写文件,那么当所有服务开始运行并保持这些服务在后台运行时,它将从控制台退出。

docker-compose up --build -d  // <------ Here I added '-d'

在我在没有分离模式(docker-compose up --build)的情况下运行命令之前,这就是它在 jenkins 控制台中运行的原因。为此,詹金斯构建过程花费了无限的时间来完成构建。

而已 !

于 2019-09-23T05:57:47.523 回答
1

仅用于docker-compose build构建图像。如果您使用docker-compose up,容器将永远开始运行,除非您强制停止它。

更新:

如果你想在 docker 容器中构建你的前端程序。你应该在 Dockerfile 的末尾有这个,而不是RUN npm run-script build

CMD [ "npm" ,"run-script", "build"]

CMD意味着当您的容器运行时,docker 将运行该命令。如果该命令完成执行,docker 容器将停止。

但这RUN意味着当您构建映像时,docker 将运行该命令来构建映像。

CMD和之间是不同的。RUN建议您从官方文档中查看这两者的详细信息。

于 2019-09-17T15:05:19.237 回答