如何退出离开 docker 容器 运行(在詹金斯中)
How to exit leaving docker container running (in jenkins)
我正在为两项服务使用 docker-compose 文件。一个用于 React App,另一个用于 Nginx 服务器。我正在使用 Jenkins 定期构建(15 分钟)。在詹金斯的构建部分,我执行命令 docker-compose up --build
。但问题是,无论何时 jenkins 开始构建,它都需要无限的时间才能完成,尽管两个容器在开始构建几分钟后就已经启动了。由于第一个构建未完成,另一个构建作为待处理进入队列。
现在我的问题是如何在容器启动时完成构建过程。
docker-撰写
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 控制台屏幕截图
使用 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
是不一样的。这两个建议你去官方文档查看一下。
终于找到解决方法
如果我 运行 我的撰写文件处于分离模式 (-d),那么当所有服务开始 运行 时它会从控制台退出并保持这些服务 运行ning在后台。
docker-compose up --build -d // <------ Here I added '-d'
在我 运行 没有分离模式的命令 (docker-compose up --build
) 之前,这就是它在 jenkins 控制台中 运行ning 的原因。对于那个詹金斯构建过程花了无限时间来完成构建。
就是这样!
我正在为两项服务使用 docker-compose 文件。一个用于 React App,另一个用于 Nginx 服务器。我正在使用 Jenkins 定期构建(15 分钟)。在詹金斯的构建部分,我执行命令 docker-compose up --build
。但问题是,无论何时 jenkins 开始构建,它都需要无限的时间才能完成,尽管两个容器在开始构建几分钟后就已经启动了。由于第一个构建未完成,另一个构建作为待处理进入队列。
现在我的问题是如何在容器启动时完成构建过程。
docker-撰写
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 控制台屏幕截图
使用 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
是不一样的。这两个建议你去官方文档查看一下。
终于找到解决方法
如果我 运行 我的撰写文件处于分离模式 (-d),那么当所有服务开始 运行 时它会从控制台退出并保持这些服务 运行ning在后台。
docker-compose up --build -d // <------ Here I added '-d'
在我 运行 没有分离模式的命令 (docker-compose up --build
) 之前,这就是它在 jenkins 控制台中 运行ning 的原因。对于那个詹金斯构建过程花了无限时间来完成构建。
就是这样!