簡體   English   中英

如何以非 root 用戶身份在 alpine 容器中運行 Docker-in-Docker?

[英]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 套接字。 但是,會發生兩件事:

  1. 我必須在容器內以 root 身份重新運行docker-perms.sh ,因為以jenkins用戶身份運行docker ps會返回permission denied錯誤。 運行腳本后,不再產生錯誤

  2. 當我從 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM