Centos7: операция запрещена - mysql

Я установил 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 .

Но я все еще получаю ту же ошибку.

Тоже смотрел на этот предложенное решение

Любые идеи?

Спасибо, Тео.

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

Daniel Farrell 30.12.2018 17:21

Привет Дэн. Я думаю, это гораздо больше ...

Theo 30.12.2018 17:22

@DanFarrell Вы имеете в виду, что запускаете mysql-сервер из CentOS с образом mysql, верно?

Theo 30.12.2018 17:26

@DanFarrell Это вызывает проблему: systemctl

Theo 30.12.2018 17:35

Вы должны предположить, что systemd и такие команды, как systemctl, initctl и service, просто не работают в Docker. Если вы хотите создать контейнер MySQL, стоковое изображение mysql - прекрасная отправная точка. Обычно вы запускаете службу напрямую, как команду переднего плана, без какой-либо системы инициализации.

David Maze 30.12.2018 20:46

@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

Theo 31.12.2018 05:24

@DanFarrell Стоит ли мне беспокоиться о том, что mysql-server не запускается в CentOS?

Theo 31.12.2018 05:25

@ Тео, ты попробовал предложенный мной ответ. вы также можете детализировать изображение

Adiii 31.12.2018 07:01

@Adiii Да, работает хорошо. но просто в образовательных целях я хочу заставить его работать с командой "systemctl start mysqld". Я новичок в этом.

Theo 31.12.2018 07:52

@Adiii Также ваше решение не работает в фоновом режиме.

Theo 31.12.2018 07:54

@Theo просто добавьте эту строку в файл докеров RUN systemctl enable mysqld

Adiii 31.12.2018 08:46

@Theo я не стал бы тратить мое время на запуск систем инициализации в докере. Для этого нет особо веских причин - я бы перезапустил контейнер вместо того, чтобы входить в систему и выполнять традиционное управление службами. Я бы попытался полностью отделить его от ОС хоста и избежать привилегированного режима. Я бы тоже держал свои контейнеры эфемерными и сосредоточился на том, чтобы понять, почему, когда контейнер уйдет, мои данные будут сохранены. Я действительно не понимаю, как init делает что-то большее, чем просто включение традиционных методов управления, которые не применимы к парадигме докеров.

Daniel Farrell 31.12.2018 15:46
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
12
2 627
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Я считаю, что проблема с файлом 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.

Умная. Но, в конце концов, мне интересно, какую ценность это добавляет. В качестве примечания для других читателей я бы посоветовал вам придерживаться парадигмы «один процесс на контейнер», а не пытаться заставить традиционные системы управления работать в докере.

Daniel Farrell 31.12.2018 15:49

@DanFarrell Это работает для меня, поэтому я оставлю его как есть.

Theo 01.01.2019 08:24

@DanFarrell Также поздравляю с Новым годом, много успехов и счастья.

Theo 01.01.2019 08:47

с новым годом всех @Theo

Adiii 01.01.2019 08:50

Я могу нормально запустить mysql с помощью сценария docker-systemctl-замена, который имитирует команды "systemctl" без активного демона systemd. Вы можете посмотреть на это в примерах docker-systemctl-images.

Другие вопросы по теме