[英]How to run Docker-in-Docker in an alpine container as a non-root user?
正如标题所说,我正在尝试在 alpine 容器上以非 root 用户身份运行docker compose
。
我有以下Dockerfile
:
FROM docker.io/jenkins/ssh-agent:4.4.0-alpine-jdk17
# SSH public key
ENV JENKINS_AGENT_SSH_PUBKEY "ssh-key"
# Install Docker CLI
RUN apk add --no-cache docker-cli docker-cli-compose
# Add docker permissions to Jenkins user
COPY docker-perms.sh /docker-perms.sh
RUN delgroup ping && sh /docker-perms.sh
# I have to delete ping group as it has the same GID as docker
和docker-perms.sh
:
#!/bin/sh
set -e
DOCKER_SOCKET=/var/run/docker.sock
RUNUSER=jenkins
if [ -S ${DOCKER_SOCKET} ]; then
DOCKER_GID=$(stat -c '%g' ${DOCKER_SOCKET})
DOCKER_GROUP=$(getent group ${DOCKER_GID} | awk -F ":" '{ print $1 }')
if [ $DOCKER_GROUP ]
then
addgroup $RUNUSER $DOCKER_GROUP
else
addgroup -S -g ${DOCKER_GID} docker
addgroup $RUNUSER docker
fi
fi
然后我在启动容器时挂载主机的 docker 套接字。 但是,会发生两件事:
我必须在容器内以 root 身份重新运行docker-perms.sh
,因为以jenkins
用户身份运行docker ps
会返回permission denied
错误。 运行脚本后,不再产生错误
当我从 Jenkins controller 运行作业时,仍然会再次出现permission denied
错误
我究竟做错了什么?
我发现我做错了什么: docker.sock
仅在构建映像后安装,因此脚本无法添加组。
这不是一个非常好的解决方法,但我想我可以直接在 Dockerfile 上添加组:
FROM docker.io/jenkins/ssh-agent:4.4.0-alpine-jdk17
# SSH public key
ENV JENKINS_AGENT_SSH_PUBKEY "ssh-key"
# Install Docker CLI
RUN apk add --no-cache docker-cli docker-cli-compose
# Add Docker permissions to Jenkins user
RUN DOCKER_GID=999 && \
delgroup $(grep $DOCKER_GID /etc/group | cut -d: -f1) && \
addgroup -S -g $DOCKER_GID docker && addgroup jenkins docker
这假设 docker 组 ID 将为 999
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.