Docker centos7 systemctl deos не работает: не удалось подключить D-bus

Я пытаюсь запустить elasticsearch на докере.

Мои функции, как показано ниже

  • хост-система: OSX 10.12.5
  • докер: 17.05.0-се
  • рабочий образ докера: centos:latest

Я следил за этой статьей. , но он застрял с systemctl daemon-reload.

Я нашел CentOS официальный ответ об этой D-bus ошибке, но когда я запустил команду docker run, она показывает сообщение ниже. [!!!!!!] Failed to mount API filesystems, freezing.

Как я могу решить эту проблему?

К вашему сведению, вот Dockerfile то, что я создаю образ

FROM centos
MAINTAINER juneyoung <[email protected]>

ARG u=elastic
ARG uid=1000
ARG g=elastic
ARG gid=1000
ARG p=elastic

# add USER
RUN groupadd -g ${gid} ${g}
RUN useradd -d /home/${u} -u ${uid} -g ${g} -s /bin/bash ${u}


# systemctl settings from official Centos github
# https://github.com/docker-library/docs/tree/master/centos#systemd-integration
ENV container docker
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
systemd-tmpfiles-setup.service ] || rm -f $i; done); \
rm -f /lib/systemd/system/multi-user.target.wants/*;\
rm -f /etc/systemd/system/*.wants/*;\
rm -f /lib/systemd/system/local-fs.target.wants/*; \
rm -f /lib/systemd/system/sockets.target.wants/*udev*; \
rm -f /lib/systemd/system/sockets.target.wants/*initctl*; \
rm -f /lib/systemd/system/basic.target.wants/*;\
rm -f /lib/systemd/system/anaconda.target.wants/*;
VOLUME [ "/sys/fs/cgroup" ]



# yum settings
RUN yum -y update
RUN yum -y install java-1.8.0-openjdk.x86_64
ENV JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-3.b12.el7_3.x86_64/jre/

# install wget
RUN yum install -y wget

# install net-tools : netstat, ifconfig
RUN yum install -y net-tools

# Elasticsearch install
ENV ELASTIC_VERSION=5.4.0
RUN rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
RUN wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-${ELASTIC_VERSION}.rpm
RUN rpm -ivh elasticsearch-${ELASTIC_VERSION}.rpm


CMD ["/usr/sbin/init"]

и я побежал с командой

docker run -ti -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name=elastic2 elastic2


person Juneyoung Oh    schedule 02.06.2017    source источник
comment
Зачем вам systemd внутри контейнера? Это не стандартный подход   -  person Robert    schedule 02.06.2017
comment
Пожалуйста!   -  person Robert    schedule 07.06.2017


Ответы (2)


Во-первых, благодаря @Robert. Я так не думал.

Все, что мне нужно сделать, это просто отредактировать мою команду CMD.

Измените это на CMD["elasticsearch"]

Однако для доступа из браузера придется потрудиться. см. это сообщение на форуме elasticsearch.

person Juneyoung Oh    schedule 07.06.2017
comment
Я думаю, что это не ответ, но, по крайней мере, возможность обхода. А так как ответов больше нет, то закрываю этот вопрос. - person Juneyoung Oh; 18.06.2017

Вы можете следовать командам для ОС с поддержкой systemd, если замените обычную команду systemctl. Вот как я устанавливаю elasticsearch в док-контейнер Centos.

Подробнее см. "docker-systemctl-replacement".

person Guido U. Draheim    schedule 09.07.2017
comment
Спасибо за ваш ответ и причудливую реализацию. Я еще не использовал его, но выглядит хорошо. Мне нравится, как вы объясняете причины. Спасибо! - person Juneyoung Oh; 10.07.2017