首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头无根,是无根的吗?

码头无根,是无根的吗?
EN

Stack Overflow用户
提问于 2020-10-30 15:12:21
回答 1查看 1.6K关注 0票数 1

对于我的工作,我想运行JenkinsDocker Rootless (只对这个容器使用sysbox运行时),全部以Docker Rootless运行。

我想这样做,因为我需要一个安全的环境,因为我不检查詹金斯管道

但是,当我在无根目录中运行码头无根时,我会得到以下错误:

代码语言:javascript
复制
[rootlesskit:parent] error: failed to setup UID/GID map: newuidmap 54 [0 1000 1 1 100000 65536] failed: newuidmap: write to uid_map failed: Operation not permitted
: exit status 1

我试了很多次,但都没能成功。有人能解决这个问题吗?

谢谢你读我的文章,祝你今天愉快!

编辑1

你好,我冒昧地重新提出了这个问题,因为对我们的环境安全至关重要,我的老板每天都提醒我。有人能回答这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-03 11:29:48

当您想要在Jenkins容器中使用docker build命令时,事情变得有点棘手。我无意中发现了这个问题,当我想要构建对接映像,而不是根,在用户'jenkins‘之下。我在一篇文章中写了这个解决方案,在文章中我详细地解释了在引擎盖下发生了什么。关键是确定docker.sock套接字在哪个GID下运行(取决于系统)。所以你要做的是:

运行以下命令:

代码语言:javascript
复制
$ stat /var/run/docker.sock

输出:

代码语言:javascript
复制
jenkins@wsl-ubuntu:~$ stat /var/run/docker.sock
  File: /var/run/docker.sock
  Size: 0               Blocks: 0          IO Block: 4096   socket
Device: 17h/23d Inode: 552         Links: 1
Access: (0660/srw-rw----)  Uid: (    0/    root)   Gid: ( 1001/  docker)
Access: 2021-03-03 10:43:05.570000000 +0200
Modify: 2021-03-03 10:43:05.570000000 +0200
Change: 2021-03-03 10:43:05.570000000 +0200
 Birth: -

在这种情况下,GID是1001,但也可以是999或计算机中的其他东西。

现在,创建一个Dockerfile并粘贴下面的代码,从上面的stat命令输出中将ENV变量替换为您自己的变量:

代码语言:javascript
复制
FROM jenkins/jenkins:lts-alpine

USER root

ARG DOCKER_HOST_GID=1001 #Replace with your own docker.sock GID
ARG JAVA_OPTS=""

ENV DOCKER_HOST_GID $DOCKER_HOST_GID
ENV JAVA_OPTS $JAVA_OPTS

RUN set -eux \
&& apk --no-cache update \
&& apk --no-cache upgrade --available \
&& apk --no-cache add shadow \
&& apk --no-cache add docker curl --repository http://dl-cdn.alpinelinux.org/alpine/latest-stable/community \
&& deluser --remove-home jenkins \
&& addgroup -S jenkins -g $DOCKER_HOST_GID \
&& adduser -S -G jenkins -u $DOCKER_HOST_GID jenkins \
&& usermod -aG docker jenkins \
&& apk del shadow curl

USER jenkins
WORKDIR $JENKINS_HOME

为了给出一个有用的示例,下面是一个坞-撰写文件:

代码语言:javascript
复制
version: '3.3'

services:
  jenkins:
    image: jenkins_master
    container_name: jenkins_master
    hostname: jenkins_master
    restart: unless-stopped
    env_file:
      - jenkins.env
    build:
      context: .
    cpus: 2
    mem_limit: 1024m
    mem_reservation: 800M
  
    ports:
      - 8090:8080
      - 50010:50000
      - 2375:2376
    volumes:
      - ./jenkins_data:/var/jenkins_home
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - default

volumes:
  jenkins_data: {}
networks:
  default:
    driver: bridge

现在让我们创建ENV变量:

代码语言:javascript
复制
cat > jenkins.env <<EOF
DOCKER_HOST_GID=1001 #Replace with your own docker.sock GID
JAVA_OPTS=-Dhudson.slaves.NodeProvisioner.MARGIN0=0.85
EOF

最后,运行命令docker-compose up -d。它将构建图像,并运行它。然后访问HTTP://host_machine_ip:8090,仅此而已。

如果运行docker inspect --format '{{ index (index .Config.Env) }}' jenkins_master,您将看到第一个和第二个变量是我们设置的变量。更多细节可以在这里找到:如何在码头詹金斯安装中运行无根码头

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64611033

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档