Образ сборки с ошибкой файла докера: не удалось установить соединение D-Bus: операция не разрешена

Я создаю image с docker file, в моем файле докеров я выполняю сценарий. В сценарии есть несколько команд, например:

systemctl start postgresql-9.6.service
systemctl disable NetworkManager

И когда я выполняю docker build, возникает ошибка:

Не удалось установить соединение D-Bus: операция запрещена

Изображение основано на centos. Я пытаюсь использовать базовый образ centos, который поддерживает systemd (solita / centos-systemd ), но это не сработало.

Любые идеи?


person zysaaa    schedule 18.11.2019    source источник
comment
Привет zysaaa, чего ты хочешь добиться? Только в очень редких случаях рекомендуется запускать службу через systemctl внутри докера. Предоставьте дополнительную информацию о вашем варианте использования.   -  person ckaserer    schedule 18.11.2019
comment
Спасибо за ваш комментарий, я новичок в docker.И я хочу настроить среду, необходимую для запуска проекта в моем файле dockerfile, например некоторую конфигурацию базы данных, включить службу sshd и т. Д., А после docker build изображение Я получу все, что мне нужно. Разве эти операции не следует выполнять в файле dockerfile? @ClemensKaserer   -  person zysaaa    schedule 18.11.2019
comment
возможный дубликат stackoverflow.com/questions/50393525/   -  person Here_2_learn    schedule 18.11.2019
comment
Привет, here_2_learn, хорошее замечание, но я бы не стал рассматривать это как дубликат. Проблема здесь, похоже, больше связана с попытками работать с контейнерами, как с виртуальными машинами.   -  person ckaserer    schedule 18.11.2019
comment
@zysaaa, если какой-либо из ответов решил вашу проблему, примите соответствующий ответ, чтобы поделиться решением с сообществом. Если нет, пожалуйста, предоставьте дополнительную информацию   -  person ckaserer    schedule 23.12.2019


Ответы (2)


Перенос беседы из комментариев в ответ:

Клеменс: Здравствуйте, zysaaa, чего вы хотите добиться? Только в очень редких случаях рекомендуется запускать службу через systemctl внутри докера. Предоставьте дополнительную информацию о вашем варианте использования.

zysaaa: спасибо за ваш комментарий, я новичок в docker. И я хочу настроить среду, необходимую для запуска проекта в моем файле dockerfile, например некоторую конфигурацию базы данных, включить службу sshd и так далее, и после сборки докера в образе, который я получу, будет все, что мне нужно. Разве эти операции не следует выполнять в файле dockerfile? @ClemensKaserer

Клеменс: Нет ^^. Образ докера должен иметь единственную цель, например запустите свою базу данных postgres. Это означает, что в вашем контейнере вы хотите запустить только этот единственный процесс (postgres) и ничего больше. Таким образом, нет полной ОС со всеми ее подпроцессами. Это один из аспектов, который делает контейнерную технологию такой мощной. Вам не нужно запускать всю ОС, только тот процесс, который вам нужен. В частности, для postgres я рекомендую использовать официальный образ и переходить оттуда. Взглянув на файл Dockerfile, связанный с изображением, вы уже довольно много узнаете о том, как следует работать с контейнерами;)


Вот ссылка на образ postgres на dockerhub

и связанный файл докеров для изображения с тегом: latest

Если у вас есть что-то, что вы хотели бы объяснить, просто прокомментируйте ответ, и я дополню его в ответе.

person ckaserer    schedule 18.11.2019

На Centos7 все службы запускаются и останавливаются через демон systemd. Команда systemctl просто попытается поговорить с демоном, используя канал d-bus - и именно отсюда приходит сообщение. Просто потому, что в контейнере нет systemd.

Чтобы избежать этой ситуации, можно использовать сценарий docker-systemctl-replacement. И примеры docker-systemctl-images уже содержат вариант postgres.

person Guido U. Draheim    schedule 19.11.2019