2017-11-30 10 views
1

Ich verwende Ubuntu-16.04 Bild mit Docker zu testen, mein Kochbuch in lokalen. Während ich kitchen converge mache, erhalte ich den folgenden Fehler. Ich habe herausgefunden, systemctl funktioniert nicht richtig. Kann mir bitte jemand helfen, dieses Problem zu beheben ODER eine andere Möglichkeit, das gleiche zu erreichen?systemctl Fehler in Docker ‚Fehler beim Bus verbinden: Keine solche Datei oder das Verzeichnis‘

[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 

Das ist mein .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 
+0

systemctl funktioniert nur, wenn Sie Systemd ausführen, und die Verwendung von Systemd in einem Andock-Container ist keine besonders gute Idee - der Docker Way soll den einzelnen Dienst, den Container ausführen soll, direkt aufrufen, anstatt eine Init zu haben System in jedem Container. –

Antwort

2

Normalerweise Docker nicht systemd Dienstleistungen im Behälter nicht unterstützt, aber Sie können ein spezielles ubuntu systemd Bild mit einigen zusätzlichen Host-Konfiguration verwenden. Beachten Sie, dass dieses Bild nicht empfohlen wird, in der Produktion ausgeführt werden.

Zunächst müssen Sie Ihre Host-Setup der Lage sein, dieses Bild zu laufen:

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

Dann können Sie Container laufen mit systemd (Hinzufügen notwendigen Halterungen und Flaggen):

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 
+0

Test Kitchen ist eine Integrationstest-Suite, kein Produktionssystem :) – coderanger

+0

Ich habe versucht mit '' ubuntu-systemd'' Bild, aber es funktioniert nicht. Ich gebe den gleichen Fehler wie ich oben gezeigt habe. Dieses Bild ist für ** systemd ** aber in meinem Fall ist es ** systemctl **. Ist es das Problem? –

+0

** systemd ** ist ein init System- und System-Manager, während ** systemctl ** ein Befehlszeilen-Tool zur Verwaltung von Systemd-Diensten ist. Ich habe einige Editionen hinzugefügt, die Ihnen helfen können, Ihr Ziel zu erreichen. –

2

kitchen-docker ist nicht wirklich eingerichtet, um mit Systemd zu arbeiten. Ich würde empfehlen stattdessen kitchen-dokken zu verwenden, was ziemlich einfach ist, auf diese Weise einzurichten.

0

JA, es gibt einen anderen Weg, um das Gleiche zu erreichen! Sie können versuchen, das Standard Systemd Systemctl durch die https://github.com/gdraheim/docker-systemctl-replacement zu ersetzen ... während es in überraschend vielen Umgebungen funktioniert, wurde es bisher nicht mit Küche getestet. Bitte geben Sie ein Feedback, wenn Sie es versuchen.

Verwandte Themen