如何退出以离开Docker容器运行状态(在jenkins中)

时间:2019-09-17 13:13:04

标签: docker jenkins docker-compose jenkins-pipeline jenkins-build-flow

我正在将docker-compose文件用于两项服务。一个用于React App,另一个用于Nginx服务器。我正在使用Jenkins进行定期构建(15分钟)。在jenkins的构建部分中,我执行命令Comparable<? super T>。但是问题是,无论何时詹金斯开始构建,尽管这两个容器在开始构建几分钟后就已经启动,但是只要花完无限的时间就可以完成。由于尚未完成第一个构建,因此另一个构建以待处理状态进入队列。

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

docker-compose

docker-compose up --build

React应用程序的Dockerfile

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:

nginx的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

Jenkins控制台构建过程的屏幕截图

enter image description here

2 个答案:

答案 0 :(得分:1)

使用docker-compose build仅生成图像。如果您使用docker-compose up,则除非您强制停止容器,否则容器将永远运行。

更新

如果要在Docker容器中构建前端程序。您应该在Dockerfile的末尾使用它,而不是RUN npm run-script build

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

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

但是RUN表示当您构建映像时,docker将运行该命令来构建映像。

CMDRUN之间有所不同。建议您从官方文档中查看这两个细节。

答案 1 :(得分:0)

最后我找到了解决方法

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

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

在运行不带分离模式(docker-compose up --build)的命令之前,这就是为什么它在jenkins控制台中运行的原因。对于那个詹金斯,构建过程花费了无限的时间来完成整个构建。

就是这样!