簡體   English   中英

如何基於對/var/run/docker.sock的臨時訪問授予Docker容器

[英]How to give docker container based on scratch access to /var/run/docker.sock

我想從頭開始在容器內運行的Go代碼中使用主機上的Docker套接字。

Dockerfile看起來像這樣:


    FROM golang:1.12.4-alpine3.9 as builder

    RUN mkdir /user && \
        echo 'nobody:x:65534:65534:nobody:/:' > /user/passwd && \
        echo 'nobody:x:65534:' > /user/group

    RUN apk add --no-cache ca-certificates git

    WORKDIR /src

    COPY go.mod ./
    RUN go mod download

    COPY . .
    RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .

    FROM scratch as final

    COPY --from=builder /user/group /user/passwd /etc/
    COPY --from=builder /etc/ssl/certs/ca-certificates.crt /etc/ssl/certs/
    COPY --from=builder /src/app /app
    COPY --chown=nobody:nobody data /.local

    USER nobody:nobody

    ENTRYPOINT ["/app"]

泊塢窗服務本身包含/var/run/docker.sock的安裝

docker service inspect輸出:


  "Mounts": [
        {
            "Type": "bind",
            "Source": "/var/run/docker.sock",
            "Target": "/var/run/docker.sock"
        }
    ],

我嘗試過的事情:

  1. 構建器touch /var/run/docker.sock並在最終 COPY --chown=nobody:nobody --from=builder /var/run /var/run

  2. 不同的用戶(我拒絕以root用戶身份運行。這是錯誤的做法)。

  3. 最后沒有人添加到docker組。

編輯:

在這種配置下,我收到以下錯誤,因為沒有人作為用戶沒有訪問/var/run/docker.socket的權限

嘗試在unix:///var/run/docker.sock上連接到Docker守護程序套接字時獲得的權限被拒絕:獲取http://%2Fvar%2Frun%2Fdocker.sock/v1.25/services :撥打unix / var /run/docker.sock:連接:權限被拒絕

要與docker守護程序通信,您需要以root(或sudo)身份運行命令,或者您的用戶必須是docker組的成員。

為了從非root用戶且不使用sudo的情況下使用它,您將需要在容器創建docker組並將您的用戶添加到該組中。 注意:容器的docker組必須具有與主機上實際 docker組相同的GID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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