Я установил mysql в CentOS и теперь хочу запустить mysql-сервер. Однако я получаю эту ошибку:
# systemctl start mysqld
Failed to get D-Bus connection: Operation not permitted
Чтобы исправить это, я создал Dockerfile, как показано
FROM centos:7
MAINTAINER theodosiostziomakas <[email protected]>
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" ]
CMD ["/usr/sbin/init"]
А затем запустите его, чтобы создать изображение.
$ docker build --rm -t local/c7-systemd .
Но я все еще получаю ту же ошибку.
Тоже смотрел на этот предложенное решение
Любые идеи?
Спасибо, Тео.
Привет Дэн. Я думаю, это гораздо больше ...
@DanFarrell Вы имеете в виду, что запускаете mysql-сервер из CentOS с образом mysql, верно?
@DanFarrell Это вызывает проблему: systemctl
Вы должны предположить, что systemd и такие команды, как systemctl, initctl и service, просто не работают в Docker. Если вы хотите создать контейнер MySQL, стоковое изображение mysql - прекрасная отправная точка. Обычно вы запускаете службу напрямую, как команду переднего плана, без какой-либо системы инициализации.
@DanFarrell. да. Я запускаю mysql из Docker на своей машине как $ docker run --name theo-mysql5 -e MYSQL_ALLOW_EMPTY_PASSWORD = yes -v / Users / theodosiostziomakas / MySql: / var / lib / mysql -p 3307: 3307 -d mysql
@DanFarrell Стоит ли мне беспокоиться о том, что mysql-server не запускается в CentOS?
@ Тео, ты попробовал предложенный мной ответ. вы также можете детализировать изображение
@Adiii Да, работает хорошо. но просто в образовательных целях я хочу заставить его работать с командой "systemctl start mysqld". Я новичок в этом.
@Adiii Также ваше решение не работает в фоновом режиме.
@Theo просто добавьте эту строку в файл докеров RUN systemctl enable mysqld
@Theo я не стал бы тратить мое время на запуск систем инициализации в докере. Для этого нет особо веских причин - я бы перезапустил контейнер вместо того, чтобы входить в систему и выполнять традиционное управление службами. Я бы попытался полностью отделить его от ОС хоста и избежать привилегированного режима. Я бы тоже держал свои контейнеры эфемерными и сосредоточился на том, чтобы понять, почему, когда контейнер уйдет, мои данные будут сохранены. Я действительно не понимаю, как init делает что-то большее, чем просто включение традиционных методов управления, которые не применимы к парадигме докеров.






Я считаю, что проблема с файлом Dockerfile или командой запуска
Кажется, проблема в вашем Dockerfile находится в этой строке
RUN (cd /lib/systemd/system/sysinit.target.wants/; for i in *; do [ $i == \
Вот MySQL Centos Dockerfile
# Starting from base CentOS image
FROM centos:7
# Enabling SystemD
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" ]
# Enabling EPEL & Remi repo
#RUN yum install -y epel-release && \
#yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# Mysql repo & installion
RUN yum install -y https://dev.mysql.com/get/mysql57-community-release-el7-9.noarch.rpm && \
yum install -y mysql mysql-server
RUN chkconfig --level 345 mysqld on
RUN systemctl enable mysqld
VOLUME [ "/var/lib/mysql" ]
# Port Expose
EXPOSE 3306
CMD ["/usr/sbin/init"]
Теперь следующий шаг - запустить
--privileged is not enough, you also need to mount cgroup
Вот команда
docker run --privileged -v /sys/fs/cgroup:/sys/fs/cgroup:ro -it adilm7177/centos-mysql
Вы можете создать свой собственный или вы можете вытащить приведенный выше образ из реестра докеров, который я создаю и отправляю во время тестирования.
docker push adilm7177/centos-mysql:latest
Обновлять:
RUN systemctl enable mysqld
После добавления я могу запускать и останавливать использование systemctl.
Умная. Но, в конце концов, мне интересно, какую ценность это добавляет. В качестве примечания для других читателей я бы посоветовал вам придерживаться парадигмы «один процесс на контейнер», а не пытаться заставить традиционные системы управления работать в докере.
@DanFarrell Это работает для меня, поэтому я оставлю его как есть.
@DanFarrell Также поздравляю с Новым годом, много успехов и счастья.
с новым годом всех @Theo
Я могу нормально запустить mysql с помощью сценария docker-systemctl-замена, который имитирует команды "systemctl" без активного демона systemd. Вы можете посмотреть на это в примерах docker-systemctl-images.
Образы Docker обычно не имеют systemctl, поэтому этот метод запуска приложений обычно меняется, когда они запускаются в Docker. Официальный образ mysql использует сценарий запуска для начальной загрузки mysql вместо сценария инициализации. Вы, вероятно, тоже захотите это сделать (или просто используйте официальный образ mysql, который отлично работает для меня).