Как предоставить Docker-контейнер на основе доступа к /var/run/docker.sock

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

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. Добавление никого из окончательный в группу докеров.

Обновлено:

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

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get http://%2Fvar%2Frun%2Fdocker.sock/v1.25/services: dial unix /var/run/docker.sock: connect: permission denied

Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Развертывание модели машинного обучения с помощью Flask - Angular в Kubernetes
Kubernetes - это портативная, расширяемая платформа с открытым исходным кодом для управления контейнерными рабочими нагрузками и сервисами, которая...
Как создать PHP Image с нуля
Как создать PHP Image с нуля
Сегодня мы создадим PHP Image from Scratch для того, чтобы легко развернуть базовые PHP-приложения. Пожалуйста, имейте в виду, что это разработка для...
0
0
992
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Другие вопросы по теме