skip to Main Content

I created a simple mysql docker instance as

docker run -d
–name mysql3
-p 3306:3306
-v db:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=rsecret
-e MYSQL_DATABASE=mkt_data_db
mysql/mysql-server:8.0

After that I logged in and created tables

$docker exec -it mysql3 bash
#mysql -u root -p

use mkt_data_db;
create table price (ticker char(30), eod_date date, close float);
insert into price(ticker, eod_date, close) values (‘xyz’, curdate(), 100.1);

When I logout and check db directory, its empty

$ ls -al db/
total 0
drwxr-xr-x 2 accnt staff 64 21 Jun 23:38 .
drwxr-xr-x 6 accnt staff 192 21 Jun 23:38 ..

when I stop+rm+run docker again, I do see the the ‘price’ table and the data within it
Where is the database stored on my local host (mac)?
I would ideally like to move these database files (data) to another computer, provide new DB volume on docker run there and see the data on that machine.

2

Answers


  1. Chosen as BEST ANSWER

    The above problem was solved by providing absolute path with -v flag i.e.

    docker run -d
    --name mysql3
    -p 3306:3306
    -v /Users/accnt/db:/var/lib/mysql
    -e MYSQL_ROOT_PASSWORD=rsecret
    -e MYSQL_DATABASE=mkt_data_db
    -e MYSQL_USER=mkt_data_usr
    -e MYSQL_PASSWORD=usecret
    mysql/mysql-server:8.0

    i.e. change -v db:/var/lib/mysql to -v /Users/accnt/db:/var/lib/mysql
    After that $ls -l /Users/accnt/db showed my entire db contents (including mkt_data_db and price table inside


  2. This is an interesting problem, and kudos to you for posting the answer!

    I’d be curious to know what the result of docker inspect mysql3 would show (look for the "Mounts" section in the large amount of output) when NOT specifying the full path (like in your original question).

    An afterthought: I like to use pwd when creating a shared volume (assuming you are running the command in the desired directory):

        docker run -d
        --name mysql3
        -p 3306:3306
        -v $(pwd):/var/lib/mysql
        -e MYSQL_ROOT_PASSWORD=rsecret
        -e MYSQL_DATABASE=mkt_data_db
        -e MYSQL_USER=mkt_data_usr
        -e MYSQL_PASSWORD=usecret
        mysql/mysql-server:8.0
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search