Использование docker в изображении jenkinsci / blueocean - PullRequest
0 голосов
/ 28 мая 2020

Контекст

Я использую 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 не существует в официальном образе, но он подключается позже во время выполнения.

Есть ли способ исправить это программно в первый раз контейнер работает?

...