docker 安装并运行jenkins 后不识别服务器上的jdk,maven等配置!

Posted 努力lshdnks

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker 安装并运行jenkins 后不识别服务器上的jdk,maven等配置!相关的知识,希望对你有一定的参考价值。

公司测试环境搭建jenkins自动构建部署,采用的是一套docker安装运行,比如mysql,redis,nginx,zk,es等都是用的docker拉取并运行,jenkins也不例外,后面发现jenkins上配置构建项目时,通过报错信息发现jenkins不识别mvn命令,不识别java命令,不识别自定义的maven本地仓库地址,但是服务器环境上又是有目录,java和mvn命令正常的。。

原理:docker通过镜像创建并启动容器,一个容器就是一个独立隔离的沙箱,所以并不能识别服务器上的环境配置,需要我们在启动容器时通过-v参数命令将服务器目录挂载到docker容器指定目录!拿jenkins举例来说,如果你是用docker运行的jenkins,那么是不识别你服务器上配置的jdk环境和maven环境的,你在jenkins里系统配置中去填写你服务器上的jdk目录和maven目录以及配置文件目录,后面项目构建是肯定会报错不识别的。jenkins所在的容器是docker某个具体容器,它只能识别出这个容器里的东东,容器自己有一套独立完整的目录,可以通过命令 docker exec -it containerID /bin/bash 进入指定的容器id查看(containerID换成你的docker容器id)。

解决办法:核心是通过创建启动docker容器时带上-v参数命令,将将服务器目录挂载到docker容器目录。

一般docker都喜欢用docker-compose.iml配置文件来保存配置命令等,方便快捷

进入配置文件所在然后执行命令

cd /data/docker-services/docker-compose
sudo docker-compose up -d jenkins

(切记不使用sudo docker-compose restart  jenkins,如果修改了docker-compose.iml,该命令还是不生效,请使用上面那个!!)

docker-compose.iml文件内容如下:

version: '3'
services:
  redis: 
    image: redis:alpine
    container_name: cdc-redis
    restart: always
    volumes:
      - ../data/redis:/data
    environment:
      - REDIS_PASSWORD=redis123
    networks:
      - cdc-net
    ports:
      - 8379:6379

  redis-withpass:
    image: redis:alpine
    container_name: cdc-redis-withpass
    command: redis-server --requirepass redis123
    restart: always
    volumes:
      - ../data/redis-withpass:/data
      - ./redis/redis.conf:/etc/redis/redis.conf
    networks:
      - cdc-net-1
    ports:
      - 7379:6379

  zookeeper:
    image: zookeeper:latest
    container_name: cdc-zookeeper
    restart: always
    volumes:
      - ../data/zookeeper:/data
      - ../data/zookeeper:/datalog
    networks:
      - cdc-net
    ports:
      - 2181:2181

  rabbitmq:
    image: rabbitmq:3.7-management-alpine
    container_name: cdc-rabbitmq
    restart: always
    volumes:
      - ../data/rabbitmq:/var/lib/rabbitmq/mnesia
    networks:
      - cdc-net
    ports:
      - 5672:5672
      - 15672:15672
    environment:
      - RABBITMQ_DEFAULT_USER=rabbitmq
      - RABBITMQ_DEFAULT_PASS=rabbitmq123

  postgres:
    image: postgres:9.6-alpine
    container_name: cdc-postgres
    restart: always
    volumes:
      - ../data/postgres:/var/lib/postgresql
    networks:
      - cdc-net
    ports:
      - 5432:5432
    environment:
      - POSTGRES_PASSWORD=postgres123

  mysql:
    image: mysql:5.7
    container_name: cdc-mysql
    restart: always
    networks:
      - cdc-net
    ports:
      - 8306:3306
    volumes:
      - ../data/mysql:/var/lib/mysql
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: mysql123

  jenkins:
    image: jenkins/jenkins:alpine
    container_name: cdc-jenkins
    restart: always
    networks:
      - cdc-net
    ports:
      - 8080:8080
      - 50000:50000
    volumes:
      - ../data/jenkins:/var/jenkins_home
      - /usr/java/jdk1.8.0_221-amd64:/usr/java/jdk1.8.0_221-amd64
      - /home/maven:/home/maven


networks:
  cdc-net:
    external: false
  cdc-net-1:
    external: false

 

 

核心点在于挂载

volumes:
      - ../data/jenkins:/var/jenkins_home
      - /usr/java/jdk1.8.0_221-amd64:/usr/java/jdk1.8.0_221-amd64
      - /home/maven:/home/maven

 

以上是关于docker 安装并运行jenkins 后不识别服务器上的jdk,maven等配置!的主要内容,如果未能解决你的问题,请参考以下文章

docker安装jenkins及其相关问题解决

ubuntu 中安装jenkins,基于docker运行jenkins

Jenkins+Docker 一键自动化部署 SpringBoot 项目

docker 安装 jenkins

Docker+jenkins+Gitee+Maven构建自动化部署

Docker+jenkins+Gitee+Maven构建自动化部署