我在这样的代码中使用MySQL docker 映像和 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
在容器中执行挂载的文件,但除了mysql --help
输出er.output
和退出代码之外什么都没有收到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
, client docker==3.1.1
, mysql inside container mysql Ver 14.14 Distrib 5.7.21, for Linux (x86_64) using EditLine wrapper
。
这里可能有什么问题?