Search code examples
dockercontainers

Start service using systemctl inside docker container


In my Dockerfile I am trying to install multiple services and want to have them all start up automatically when I launch the container. One among the services is mysql and when I launch the container I don't see the mysql service starting up. When I try to start manually, I get the error: Failed to get D-Bus connection: Operation not permitted

Dockerfile:

FROM centos:7

RUN yum -y install mariadb mariadb-server

COPY start.sh start.sh

CMD ["/bin/bash", "start.sh"]

My start.sh file:

service mariadb start

Docker build:

docker build --tag="pbellamk/mariadb" .

Docker run:

docker run -it -d --privileged=true pbellamk/mariadb bash

I have checked the centos:systemd image and that doesn't help too. How do I launch the container with the services started using systemctl/service commands.


Solution

  • When you do docker run with bash as the command, the init system (e.g. SystemD) doesn’t get started (nor does your start script, since the command you pass overrides the CMD in the Dockerfile). Try to change the command you use to /sbin/init, start the container in daemon mode with -d, and then look around in a shell using docker exec -it <container id> sh.