Jenkins集成:docker-compose 权限问题

一、问题:使用docker-compose up -d 启动服务器时,生成到文件是以root身份创建,不安全。

在这里插入图片描述

二、原因:docker-compose 默认以root用户启容器
三、 解决方案:使用非root用户
  1. dockerfile文件中创建创建非root用户,在CMD之前,切换到此用户
FROM xxx
# create non-privileged user and group
RUN groupadd -r mahuaping -g 1001 && useradd mahuaping -u 1001 -g mahuaping
...
USER 1001:1001
CMD ["start"]
  1. docker-compose.yml 中使用非root用户
    添加user,uid & gid: 1001;
    增加volumes卷"log:/var/workspacedo/log":指定device: ./log
version: '3'
services:
  app:
    build:
      context: .
      dockerfile: pack/Dockerfile
      args:
        conf: pack/conf
        script: pack/script
    image: qa/app-server:${TAG}
    user: 1001:1001
    volumes:
      - "log:/var/workspace/log"

volumes:
  log:
    driver_opts:
      type: none
      device: ./log
  1. pipeline中,启动docker-compose up
    复制docker-compose.yml文件到src目录,并创建log目录(当前用户为mahuaping,可以根据项目需要修改用户)
// Run app container.
stage("启动服务") {
  steps {
    script {
      def standalone_path = "pack/standalone"
      sh "cp ${standalone_path}/docker-compose.yml src"
      sh "mkdir -p src/log"
      
      dir("src") {
        sh (
          """ \
            TAG=latest \
            docker-compose up \
            -d \
          """
        )
      }
    }
  }
} 
四、成功更改log目录以及子目录权限

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐