Как предоставить докер-контейнер на основе чистого доступа к /var/run/docker.sock - PullRequest
0 голосов
/ 30 мая 2019

Я бы хотел использовать сокет Docker на хосте из кода Go, работающего внутри контейнера на основе нуля.

Файл Docker выглядит примерно так:


    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"]

Служба DockerСам включает в себя крепление для /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 в builder и COPY --chown=nobody:nobody --from=builder /var/run /var/run в final

  2. Другой пользователь (я отказываюсь работать от имени пользователя root. Это плохая практика).

  3. Добавление никого из final в группу докеров.

EDIT:

В этой конфигурации Iполучить следующую ошибку: nobody , поскольку у пользователя нет прав доступа /var/run/docker.socket

Получено разрешение при попытке подключения к сокету демона Dockerв unix: ///var/run/docker.sock: получить http://%2Fvar%2Frun%2Fdocker.sock/v1.25/services: набрать unix /var/run/docker.sock: подключиться: разрешение запрещено

1 Ответ

2 голосов
/ 31 мая 2019

Для связи с демоном docker вам нужно либо запустить команду от имени пользователя root (или sudo), либо ваш пользователь должен быть членом группы Docker.

Чтобы использовать ее из неПользователь root и без sudo, вам нужно будет создать группу Docker внутри контейнера и добавить вашего пользователя в эту группу. ПРИМЕЧАНИЕ: группа докеров внутри контейнер должен иметь тот же GID, что и фактическая группа докеров на хосте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...