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.

2 Answers 2

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
Sign up to request clarification or add additional context in comments.

Comments

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.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.