Jenkins集成:docker-compose 权限问题

Jenkins集成:docker-compose 权限问题

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

Jenkins集成:docker-compose 权限问题_第1张图片

二、原因: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目录以及子目录权限

Jenkins集成:docker-compose 权限问题_第2张图片

你可能感兴趣的:(Docker,CI:持续集成,docker,pipeline,docker-compose,root权限)