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 -puse 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
The above problem was solved by providing absolute path with -v flag i.e.
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
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):