Catálogo de series relacionadas con el tutorial de uso de Docker
No hay ninguna operación de captura de pantalla en la publicación del blog original y hay problemas sutiles. Se ha corregido y reordenado, y se ha reproducido el problema para solucionarlo.
Problema reproducido:
Los amigos que están comenzando a entrar en contacto con Docker pueden encontrar este problema. Después de crear un contenedor con una imagen centos7, use systemctl para iniciar el servicio e informar un error. En respuesta a este error, ¡lo analizaremos a continuación!
# docker run -itd --name centos7 centos:7
# docker attach centos7
# yum install vsftpd
# systemctl start vsftpd
报错 : No se pudo obtener la conexión D-Bus: operación no permitida
solución:
Primero detenga el servicio del contenedor creado originalmente y elimínelo
docker stop centos7
docker rm centos7
Ejecute el contenedor en modo privilegiado.
docker run -d --name centos7 --privileged=true centos:7 /usr/sbin/init
Ingrese al contenedor:
docker exec -it centos7 /bin/bash
# yum install vsftpd
# systemctl start vsftpd
Analiza las razones:
La filosofía de diseño de Docker no es ejecutar servicios en segundo plano en el contenedor. El contenedor en sí es un proceso principal independiente en el host. También puede entenderse indirectamente como el proceso de aplicación que ejecuta el servicio en el contenedor. El ciclo de vida de un contenedor gira en torno al proceso principal, por lo que la forma correcta de usar el contenedor es ejecutar los servicios que contiene en primer plano.
Hablando de systemd, esta suite se ha convertido en la gestión de servicios predeterminada de las distribuciones principales de Linux (como CentOS7, Ubuntu14 +), reemplazando la gestión de servicios de estilo SystemV tradicional. systemd mantiene un programa de servicio del sistema, que requiere privilegios para acceder al kernel de Linux. Y el contenedor no es un sistema operativo completo, solo un sistema de archivos, y el inicio predeterminado es solo un acceso de usuario normal al kernel de Linux, es decir, sin privilegios, ¡así que, naturalmente, no se usará!
Por lo tanto, siga los principios de diseño de contenedores y ejecute un servicio de primer plano en un contenedor.