user214603 user214603 - 1 month ago 10
MySQL Question

How to redirect stdout from docker container to host

I'm trying to call docker's mysqldump from host system for save mysql dump from golang. It works correctly with host mysqldump, but don't work with docker's mysqldump.

func writeDb(dbName string)
{
var mysqldumpPath string = "/usr/bin/mysqldump"
//var mysqldumpPath string = "/Applications/MAMP/Library/bin/mysqldump"

//cmd := exec.Command(mysqldumpPath, fmt.Sprintf("-u%s", USER), fmt.Sprintf("-p%s", PASSWORD) , dbName)
cmd := exec.Command("docker", "exec", "some-mysql", mysqldumpPath, fmt.Sprintf("%s", USER), fmt.Sprintf("-p%s", PASSWORD) , dbName, ">", fmt.Sprintf("%s.sql", dbName))

stdout, err := cmd.StdoutPipe()
if err != nil
{
log.Fatal(err)
}

if err := cmd.Start(); err != nil
{
log.Fatal(err)
}

bytes, err := ioutil.ReadAll(stdout)
if err != nil
{
log.Fatal(err)
}
err = ioutil.WriteFile("./backup/" + dbName +".sql", bytes, 0644)
if err != nil
{
panic(err)
}


}

I got only that for non-empty database
empty mysql dump

Answer Source

Instead of mysql, try a simple command like :

  • pwd
  • echo a > b, just to see if you do see a file b on your host.

You need to make that redirection inside the container in a folder which has been mounted from the host (using volume), in order for the created file to persists, once docker exec exits the container.