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
The solution is:
}
Just without "> dbname.sql"
Instead of mysql, try a simple command like :
pwd
echo a > b
, just to see if you do see a fileb
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.
EDIT:
The OP doesn't work inside
go
code. It gives an error:the input device is not a TTY
. I will try to find out why and update the post...OP:
What about using
docker exec -it [command]
Example:
or