Ошибка systemctl в докере "Не удалось подключиться к шине: нет такого файла или каталога"

Я использую образ Ubuntu-16.04 с докером для локального тестирования моей поваренной книги. При выполнении kitchen converge я получаю следующую ошибку. Я понял, что systemctl не работает должным образом. Может ли кто-нибудь помочь мне решить эту проблему ИЛИ любым другим способом добиться того же?

 [2017-11-30T15:22:30+00:00] INFO: Running queued delayed notifications before re-raising exception

 Running handlers:
   [2017-11-30T15:22:30+00:00] ERROR: Running exception handlers
   Running handlers complete
   [2017-11-30T15:22:30+00:00] ERROR: Exception handlers complete
   Chef Client failed. 9 resources updated in 06 seconds
   [2017-11-30T15:22:30+00:00] FATAL: Stacktrace dumped to /tmp/kitchen/cache/chef-stacktrace.out
   [2017-11-30T15:22:30+00:00] FATAL: Please provide the contents of the stacktrace.out file if you file a bug report
   [2017-11-30T15:22:30+00:00] ERROR: envoy_auth_apps_setup[default-service] (envoy_auth_apps::_default line 1) had an error: Chef::Exceptions::MultipleFailures: Multiple failures occurred:
   * Mixlib::ShellOut::ShellCommandFailed occurred in chef run: execute[systemctl daemon-reload] (/tmp/kitchen/cache/cookbooks/envoy_auth_apps/resources/setup.rb line 133) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
   ---- Begin output of systemctl daemon-reload ----
   STDOUT:
   STDERR: Failed to connect to bus: No such file or directory
   ---- End output of systemctl daemon-reload ----
   Ran systemctl daemon-reload returned 1
   * Mixlib::ShellOut::ShellCommandFailed occurred in delayed notification: service[envoy] (/tmp/kitchen/cache/cookbooks/envoy_auth_apps/resources/setup.rb line 194) had an error: Mixlib::ShellOut::ShellCommandFailed: Expected process to exit with [0], but received '1'
   ---- Begin output of /bin/systemctl --system restart envoy ----
   STDOUT:
   STDERR: Failed to connect to bus: No such file or directory
   ---- End output of /bin/systemctl --system restart envoy ----
   Ran /bin/systemctl --system restart envoy returned 1

   [2017-11-30T15:22:30+00:00] FATAL: Chef::Exceptions::ChildConvergeError: Chef run process exited unsuccessfully (exit code 1)
 >>>>>> ------Exception-------
 >>>>>> Class: Kitchen::ActionFailed
 >>>>>> Message: 1 actions failed.
 >>>>>>     Converge failed on instance <default-ubuntu>.  Please see .kitchen/logs/default-ubuntu.log for more details
 >>>>>> ----------------------
 >>>>>> Please see .kitchen/logs/kitchen.log for more details
 >>>>>> Also try running `kitchen diagnose --all` for configuration

Это мой .kitchen.yml

---

driver:
  name: docker
  binary: /usr/local/bin/docker
  use_sudo: false
  network:
    - ["public_network", "bridge: 'en0: Wi-Fi (AirPort)'"]

provisioner:
  name: chef_zero
  require_chef_omnibus: "12.21.14"
  environments_path: test/integration/environments
  nodes_path: test/integration/nodes
  data_bags_path: test/integration/data_bags
  client_rb:
    environment: development

verifier:
  name: inspec

platforms:
  - name: ubuntu
    driver_config:
      image: ubuntu:xenial
      platform: ubuntu
#     provision_command:
#       - apt-get -y install dbus

suites:
  - name: default
    run_list:
#   - recipe[base_app]
        - recipe[envoy_auth_apps::_default]
    verifier:
      inspec_tests:
        - test/integration/default
attributes:
  nameserver:
    domain_name: 'kitchen.xyz.io'
  envoy_auth_apps:
    consul_client_enabled: false

person Jai Prak    schedule 30.11.2017    source источник
comment
systemctl работает только в том случае, если вы используете systemd, и использование systemd в контейнере докеров не является особенно хорошей идеей - Docker Way заключается в прямом вызове единственной службы, которую должен запускать контейнер, вместо того, чтобы иметь систему инициализации в каждом контейнер.   -  person Charles Duffy    schedule 30.11.2017


Ответы (3)


Обычно докер не поддерживает systemd службы в контейнере, но вы можете использовать специальный ubuntu systemd изображение с некоторой дополнительной конфигурацией хоста. Обратите внимание, что это изображение не рекомендуется запускать в производственную среду.

Во-первых, вам необходимо настроить свой хост, чтобы иметь возможность запускать этот образ:

docker run --rm --privileged -v /:/host solita/ubuntu-systemd setup

Затем вы сможете запускать контейнеры с systemd (добавляя необходимые средства монтирования и флаги):

docker run -d --name systemd --security-opt seccomp=unconfined \
 --tmpfs /run --tmpfs /run/lock -v /sys/fs/cgroup:/sys/fs/cgroup:ro \
 -t solita/ubuntu-systemd
person Bogdan B.    schedule 30.11.2017
comment
Test Kitchen - это набор интеграционных тестов, а не производственная система :) - person coderanger; 01.12.2017
comment
Я пробовал использовать ubuntu-systemd изображение, но оно не работает. Выдает ту же ошибку, что и я, показанный выше. Это изображение для systemd, но в моем случае это systemctl. Это проблема? - person Jai Prak; 01.12.2017
comment
systemd - это система инициализации и системный менеджер, а systemctl - это инструмент командной строки для управления службами systemd. Я добавил несколько редакций, которые помогут вам в достижении вашей цели. - person Bogdan B.; 01.12.2017
comment
На самом деле systemctl использует d-bus для взаимодействия с демоном systemd, который, в свою очередь, управляет службами. Сам инструмент systemctl довольно тупой. - person Guido U. Draheim; 04.12.2017

kitchen-docker на самом деле не настроен для работы с systemd. Я бы рекомендовал вместо этого использовать kitchen-dokken, который довольно легко настроить таким образом.

person coderanger    schedule 30.11.2017

ДА, есть другой способ добиться того же! Вы можете попробовать заменить стандартный systemd systemctl на https://github.com/gdraheim/docker-systemctl-replacement ... хотя он работает в удивительном количестве сред, он пока не тестировался с кухней. Пожалуйста, поделитесь своим мнением, если вы попробуете.

person Guido U. Draheim    schedule 03.12.2017