Unos de los primeros problemas que encontre con Docker es que cuando queria iniciar servicios en un sistema que utilizara systemd en lugar del viejo init.d daba el siguiente error:

[root@e8c87e7efdd4 /]# systemctl start httpd
Failed to get D-Bus connection: Operation not permitted
[root@e8c87e7efdd4 /]# 

 

Para solucionarlo primero ejecutamos:

[root@4505f0166db1 /]# yum update -y && yum install -y initscripts

Eso nos dara una salida de todos los paquetes que se actualizaran e instalaran que por tema de espacio voy a omitir aquí, luego vamos asignar un password al usuario root, ya vamos a ver porque mas adelante:

[root@e8c87e7efdd4 /]# passwd root
Changing password for user root.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.

Los mensajes anteriores fue porque elegi como contraseña “root”, ahora ejecutamos la magia:

[root@4505f0166db1 /]# exec /usr/sbin/init

Eso nos dara una salida como la siguiente:

systemd 219 running in system mode. (+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN)
Detected virtualization docker.
Detected architecture x86-64.

Welcome to CentOS Linux 7 (Core)!

Set hostname to <a438a0349d08>.
[  OK  ] Created slice Root Slice.
[  OK  ] Created slice System Slice.
[  OK  ] Reached target Remote File Systems.
[  OK  ] Created slice User and Session Slice.
[  OK  ] Reached target Slices.
[  OK  ] Listening on Journal Socket.
         Starting Journal Service...
         Mounting FUSE Control File System...
         Mounting Huge Pages File System...
[  OK  ] Reached target Swap.
[  OK  ] Created slice system-getty.slice.
[  OK  ] Listening on /dev/initctl Compatibility Named Pipe.
         Starting Load/Save Random Seed...
[  OK  ] Reached target Encrypted Volumes.
[  OK  ] Reached target Local File Systems (Pre).
         Starting Configure read-only root support...
[  OK  ] Listening on Delayed Shutdown Socket.
         Starting Rebuild Hardware Database...
[  OK  ] Mounted FUSE Control File System.
[  OK  ] Started Journal Service.
[  OK  ] Started Load/Save Random Seed.
         Starting Flush Journal to Persistent Storage...
[  OK  ] Mounted Huge Pages File System.
[  OK  ] Started Configure read-only root support.
[  OK  ] Reached target Local File Systems.
         Starting Mark the need to relabel after reboot...
         Starting Rebuild Journal Catalog...
[  OK  ] Started Mark the need to relabel after reboot.
[  OK  ] Started Rebuild Journal Catalog.
[  OK  ] Started Flush Journal to Persistent Storage.
         Starting Create Volatile Files and Directories...
[  OK  ] Started Create Volatile Files and Directories.
         Starting Update UTMP about System Boot/Shutdown...
[  OK  ] Started Update UTMP about System Boot/Shutdown.
[  OK  ] Started Rebuild Hardware Database.
         Starting Update is Completed...
[  OK  ] Started Update is Completed.
[  OK  ] Reached target System Initialization.
[  OK  ] Reached target Paths.
[  OK  ] Listening on D-Bus System Message Bus Socket.
[  OK  ] Reached target Sockets.
[  OK  ] Reached target Basic System.
         Starting LSB: Bring up/down networking...
[  OK  ] Started D-Bus System Message Bus.
         Starting D-Bus System Message Bus...
         Starting Permit User Sessions...
         Starting Login Service...
[  OK  ] Reached target Timers.
[FAILED] Failed to start LSB: Bring up/down networking.
See 'systemctl status network.service' for details.
         Starting Cleanup of Temporary Directories...
[  OK  ] Reached target Network.
[  OK  ] Reached target Network is Online.
[  OK  ] Started Permit User Sessions.
[  OK  ] Started Console Getty.
         Starting Console Getty...
[  OK  ] Reached target Login Prompts.
[  OK  ] Started Cleanup of Temporary Directories.
[  OK  ] Started Login Service.
[  OK  ] Reached target Multi-User System.
         Starting Update UTMP about System Runlevel Changes...
[  OK  ] Started Update UTMP about System Runlevel Changes.

CentOS Linux 7 (Core)
Kernel 4.15.6-300.fc27.x86_64 on an x86_64

a438a0349d08 login: 

Finalmente nos pedirá la contraseña de root, por eso mismo se las hice cambiar mas temprano, luego de logearnos, ahora ya podremos usar service o systemcrl para reiniciar servicios.

CentOS Linux 7 (Core)
Kernel 4.15.6-300.fc27.x86_64 on an x86_64

a438a0349d08 login: root
Password: 
[root@a438a0349d08 ~]# service httpd restart
Redirecting to /bin/systemctl restart httpd.service                
[root@a438a0349d08 ~]# systemctl restart httpd
[root@a438a0349d08 ~]# 

Les puede dar error por como fuera creado la imagen, el comando para crear la maquina que use fue

#Crear la maquina
docker run -it --name=DockerTest --cap-add=SYS_ADMIN -e "container=docker" -v /sys/fs/cgroup:/sys/fs/cgroup:ro --tmpfs /run --tmpfs /run/lock centos:latest 

#Para apagarla uso el comando halt

#Para ejecutarla luego
docker start DockerTest && docker attach DockerTest

#Para apagarla de nuevo el comando halt

6 comments

  1. Buenas noches, estoy siguiendo el ejemplo, y despues de generar el comando: exec /usr/sbin/init, se genera el siguiente error
    “Couldn’t find an alternative telinit implementation to spawn.”
    cual será mi error??
    De antemano muchas gracias!!

    1. Hola Wilder

      Probablemente sea un asunto de privilegios, es decir de con que privilegios corriste el contenedor en primer lugar, puedes revisar este enlace:
      https://stackoverflow.com/questions/36545105/docker-couldnt-find-an-alternative-telinit-implementation-to-spawn

      Yo en particular siempre corro el contenedor con los siguientes permisos:

      docker run -it --privileged --hostname="server" -e "container=docker" --cap-add SYS_ADMIN --tmpfs /run -v /sys/fs/cgroup:/sys/fs/cgroup:ro --name Nombre "imagen"

      Despues le agrego los puertos que quiera incluir ademas las carpetas y/o volúmenes que quiera montar, la base es esa.

      Saludos

  2. Hola, buena guia, tengo una pregunta, como hago para salir del contenedor sin tener que apagarlo?
    docker-test login: root
    Password:
    Last login: Fri Aug 27 01:52:51 on console
    [root@docker-test ~]#
    [root@docker-test ~]# exit
    logout

    CentOS Linux 7 (Core)
    Kernel 4.18.0-305.12.1.el8_4.x86_64 on an x86_64
    docker-test login:

    Gracias de antemano!

    1. Hola Kevin

      Depende de cómo corras el contenedor en realidad, igualmente puedes probar manteniendo presionado Ctrl y sin soltar presionar primero P (sueltas) y despues presionas Q eso te debería devolver a la consola, luego para volver haces docker attach nombre_contenedor

      Saludos

  3. Hola , al ejecutar el siguiente comando me da el sigueinte fallo.
    [root@3ecf6bfa342d jboss]# exec /usr/sbin/init
    Couldn’t find an alternative telinit implementation to spawn.

    ¿Alguna ayuda?
    Un saludo.

    1. Hola Jose

      Es porque no existe la ruta, puede ser que esté en otra ubicación (dependiendo de la imagen) o que te falten los paquetes de initscripts, igualmente dependerá de la imagen que estés usando si esos paquetes esten disponibles o no, en el caso del artículo la imagen era de CentOS 7, en otras imágenes pueden no estar disponibles, igual ten en cuenta que el artículo tiene casi 6 años, así que perfectamente pueden haber cambiado de nombre los paquetes o haber sido remplazado/removido.

      Saludos

Leave a Reply

Your email address will not be published. Required fields are marked *

Discover more from Alvaro De León

Subscribe now to keep reading and get access to the full archive.

Continue reading