0

I'm trying to create a setup where when I do a "docker run" off a Dockerfile that I've created, docker will install and setup mysql, and then create a database for me to use.

Below is my simple docker file that pulls from the existing dockerfile/mysql

FROM dockerfile/mysql
COPY dbsetup.sql /tmp/dbsetup.sql
RUN bash -c "/usr/bin/mysqld_safe &" && \
  sleep 5 && \
  mysql -u root -e "CREATE DATABASE mydb"

It seems to run, but when I connect to the DB (using the IP I received from the boot2docker ip command), the database doesnt' exist.

Anyone have any ideas?

Note: I had originally tried to run all three of those commands in separate RUN statements, but that didn't work. Explanation of why here.

Community
  • 1
  • 1

2 Answers2

1

You should take example on the dockerfile/mysql Dockerfile which has the following RUN statement:

RUN echo "mysqld_safe &" > /tmp/config \
    && echo "mysqladmin --silent --wait=30 ping || exit 1" >> /tmp/config \
    && echo "mysql -e 'GRANT ALL PRIVILEGES ON *.* TO \"root\"@\"%\" WITH GRANT OPTION;'" >> /tmp/config \
    && bash /tmp/config \
    && rm -f /tmp/config

In your case you would put in your Dockerfile:

RUN echo "mysqld_safe &" > /tmp/config \
    && echo "mysqladmin --silent --wait=30 ping || exit 1" >> /tmp/config \
    && echo "mysql -u root -e \"CREATE DATABASE mydb\"" >> /tmp/config \
    && bash /tmp/config \
    && rm -f /tmp/config
Thomasleveil
  • 95,867
  • 15
  • 119
  • 113
0

I would advise either using the standard mysql container image or borrow from its dockerfile

It uses environment variables to control the database name and admin credentials.

Mark O'Connor
  • 76,015
  • 10
  • 139
  • 185