Docker can't start MariaDB/MySQL during Docker build

docker, dockerfile, mariadb, mysql

Solution

1)It is not stuck. The MariaDB start running. But you need to use CMD command and not RUN command to achieve your purpose.

The command CMD, similarly to RUN, can be used for executing a specific command. However, unlike RUN it is not executed during build, but when a container is instantiated using the image being built.

2) The last part of your dockerfile should look like this

#Run as user mysql
USER mysql

RUN echo "@TODO: Create DB, User and grant access"

#Expose Port
EXPOSE 3306

#Right way to run mysqld
CMD ["mysqld"]

For building your image

docker build -t testmariadb .

For running the built image

docker run testmariadb

OR ( for detached mode )

docker run -d testmariadb

3) Please ask your self why are you using ubuntu base image (FROM ubuntu:14.04). According to me you should use https://hub.docker.com/_/mariadb/ if you just want to run mariaDb in the container.

Problem

My current `Dockerfile` looks like this: ``` FROM ubuntu:14.04 ENV DEBIAN_FRONTEND noninteractive ENV INITRD No ENV LANG en_US.UTF-8 # Maria DB Versions ENV MARIADB_MAJOR 5.5 ENV MARIADB_VERSION 5.5.55+maria-1~trusty # Create mysql user and group RUN groupadd -r mysql && useradd -r -g mysql mysql # Install needed dependencies RUN apt-get update && apt-get install -y --no-install-recommends software-properties-common && rm -rf /var/lib/apt/lists/* # Add the MariaDB PGP key to verify their Debian packages. RUN apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db # Add MariaDB's repository. We use the Ubuntu 14.04 version as there ain't no MariaDB 5.5 for Ubuntu 16.04. RUN add-apt-repository 'deb http://mirror.jmu.edu/pub/mariadb/repo/5.5/ubuntu trusty main' # Install Maria DB and open the access for outside of the container RUN apt-get update \ && apt-get install -y --no-install-recommends mariadb-server=$MARIADB_VERSION \ && rm -rf /var/lib/apt/lists/* \ && sed -i 's/^\(bind-address\s.*\)/# \1/' /etc/mysql/my.cnf \ && update-rc.d -f mysql disable # Run as user mysql USER mysql # Start the MariaDB to add a user and create the DB RUN mysqld RUN echo "@TODO: Create DB, User and grant access" # Expose Port EXPOSE 3306 ``` When building the container using `docker build -t testmariadb .` I get the following output: ``` Step 13/17 : RUN mysqld ---> Running in 5aeb49c81f5e 170428 20:00:25 [Note] mysqld (mysqld 5.5.55-MariaDB-1~trusty) starting as process 7 ... 170428 20:00:25 InnoDB: The InnoDB memory heap is disabled 170428 20:00:25 InnoDB: Mutexes and rw_locks use GCC atomic builtins 170428 20:00:25 InnoDB: Compressed tables use zlib 1.2.8 170428 20:00:25 InnoDB: Using Linux native AIO 170428 20:00:25 InnoDB: Initializing buffer pool, size = 256.0M 170428 20:00:25 InnoDB: Completed initialization of buffer pool InnoDB: The first specified data file ./ibdata1 did not exist: InnoDB: a new database to be created! 170428 20:00:25 InnoDB: Setting file ./ibdata1 size to 10 MB InnoDB: Database physically writes the file full: wait... 170428 20:00:25 InnoDB: Log file ./ib_logfile0 did not exist: new to be created InnoDB: Setting log file ./ib_logfile0 size to 5 MB InnoDB: Database physically writes the file full: wait... 170428 20:00:25 InnoDB: Log file ./ib_logfile1 did not exist: new to be created InnoDB: Setting log file ./ib_logfile1 size to 5 MB InnoDB: Database physically writes the file full: wait... InnoDB: Doublewrite buffer not found: creating new InnoDB: Doublewrite buffer created InnoDB: 127 rollback segment(s) active. InnoDB: Creating foreign key constraint system tables InnoDB: Foreign key constraint system tables created 170428 20:00:25 InnoDB: Waiting for the background threads to start 170428 20:00:26 Percona XtraDB (http://www.percona.com) 5.5.52-MariaDB-38.3 started; log sequence number 0 170428 20:00:26 [Note] Plugin 'FEEDBACK' is disabled. 170428 20:00:26 [Note] Server socket created on IP: '0.0.0.0'. 170428 20:00:26 [Note] Event Scheduler: Loaded 0 events 170428 20:00:26 [Note] mysqld: ready for connections. Version: '5.5.55-MariaDB-1~trusty' socket: '/var/run/mysqld/mysqld.sock' port: 3306 mariadb.org binary distribution ``` As far as I can tell, it starts the MariaDB, but then is stuck there and doesn't execute a next command. Is there another way to start MariaDB in docker?

Original source