python docker 客户端没有以正确的方式执行 mysql 命令
python docker client does not execute mysql command in a right way
我在这样的代码中使用 MySQL docker image 和 docker python 客户端
import docker
client = docker.from_env()
container_name = 'local-mysql'
path_to_current_dir = '/home/user/workspace'
container = client.containers.run(
'mysql',
name=container_name,
auto_remove=True,
environment={
'MYSQL_ALLOW_EMPTY_PASSWORD': True,
},
detach=True,
volumes={
path_to_current_dir: {'bind': '/data/', 'mode': 'ro'},
}
)
er = container.exec_run('mysql -h localhost < /data/init.sql')
基本上我只想在容器中执行挂载的 *.sql
文件,但在 er.output
中只收到 mysql --help
输出,退出代码是 1
。 运行 docker exec -it local-mysql bash
和手动执行 mysql -h localhost < /data/init.sql
完美无缺。提供 tty=True
参数也无济于事。
这是我的 init.sql
文件的内容
CREATE DATABASE my_test;
CREATE TABLE `test_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`text` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
我怀疑我的命令有问题(不是按照 docker 客户接受的方式形成的?)。这是我的环境以获取更多详细信息:
Python 2.7.12
、Docker version 17.12.1-ce, build 7390fc6
、容器 mysql Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using EditLine wrapper
中的客户端 docker==3.1.1
、mysql。
这里可能有什么问题?
如果你在主机上并且想用 <
提供一些脚本,使用管道 |
或只是多个命令 &&
你必须用这个 bash trick /bin/bash -c "some command
所以它将整个命令作为一个整体传递给容器。
docker exec -it local-mysql /bin/bash -c "mysql -h localhost < /data/init.sql"
我在这样的代码中使用 MySQL docker image 和 docker python 客户端
import docker
client = docker.from_env()
container_name = 'local-mysql'
path_to_current_dir = '/home/user/workspace'
container = client.containers.run(
'mysql',
name=container_name,
auto_remove=True,
environment={
'MYSQL_ALLOW_EMPTY_PASSWORD': True,
},
detach=True,
volumes={
path_to_current_dir: {'bind': '/data/', 'mode': 'ro'},
}
)
er = container.exec_run('mysql -h localhost < /data/init.sql')
基本上我只想在容器中执行挂载的 *.sql
文件,但在 er.output
中只收到 mysql --help
输出,退出代码是 1
。 运行 docker exec -it local-mysql bash
和手动执行 mysql -h localhost < /data/init.sql
完美无缺。提供 tty=True
参数也无济于事。
这是我的 init.sql
文件的内容
CREATE DATABASE my_test;
CREATE TABLE `test_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`text` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
我怀疑我的命令有问题(不是按照 docker 客户接受的方式形成的?)。这是我的环境以获取更多详细信息:
Python 2.7.12
、Docker version 17.12.1-ce, build 7390fc6
、容器 mysql Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using EditLine wrapper
中的客户端 docker==3.1.1
、mysql。
这里可能有什么问题?
如果你在主机上并且想用 <
提供一些脚本,使用管道 |
或只是多个命令 &&
你必须用这个 bash trick /bin/bash -c "some command
所以它将整个命令作为一个整体传递给容器。
docker exec -it local-mysql /bin/bash -c "mysql -h localhost < /data/init.sql"