Контекст
Я использую Ubuntu и хочу запустить официальный образ Jenkins (например, jenkinsci/blueocean
) в контейнер docker. Мне также нужно разрешить контейнеризованному Jenkins доступ к демону Docker на хосте (например, Ubuntu).
Использование docker в docker имеет проблемы с безопасностью . Альтернатива - просто открыть сокет Docker контейнеру. Вот как я делаю это в моем docker -compose:
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
Проблема
Проблема с этим подходом заключается в том, что docker
GID между хостом и контейнером несовместим. На стороне хоста группа docker
- это 999
, но в контейнере это 101
(999
- это GID группы ping
, я думаю, это происходит, поскольку этот контейнер построен поверх Alpine. ). В самом деле:
# This is the container shell, the group is ping
bash-4.4$ ls -l /var/run/docker.sock
srw-rw---- 1 root ping 0 Apr 8 16:20 /var/run/docker.sock
Временное исправление (вручную)
Чтобы исправить, мне нужно просто открыть оболочку в контейнере как root
и запустить:
bash-4.4$ apk --no-cache add shadow
bash-4.4$ usermod -aG docker jenkins
И все готово.
Что мне нужно
Мне нужно c исправление программы, чтобы docker работал внутри официального контейнера, когда я его раскручиваю. На этапе сборки я не могу запустить usermod -aG docker jenkins
, поскольку /var/run/docker.sock
не существует в официальном образе, но он подключается позже во время выполнения.
Есть ли способ исправить это программно в первый раз контейнер работает?