我正在使用dockerode来创建和运行容器。我正在尝试将数据导入MySQL。我的代码:
docker.run('img_cwd',['mysql',
'-h', 'localhost',
'-u', 'user',
`-ppassword`,
'dbName',
'<',
`/tmp/21336/sql/data/import_file.sql"`],
[process.stdout, process.stderr],
{
Tty: false,
name: nameGenerator.getContainerName(),
AttachStdin: true,
OpenStdin: true,
StdinOnce: true,
HostConfig: {
Binds: ['/C/tmp:/tmp']
}
})
在C:/ tmp我必须文件夹“21336”
运行我的代码后,我看到导入没有发生,docker ps命令显示:
15d405443805af1a2635e7bc456311de741352ff4ae6b1efb3d43cb10a73d62c img_cwd "mysql -h localhost -u user-ppassword dbName < /tmp/21336/sql/data/import_file.sql" 9 seconds ago Exited (1) 8 seconds ago Import_b01k8qr29jh868vf0959cy_Data
当我使用'-it'标志启动容器并运行import命令时:
mysql -h localhost -u user-ppassword dbName < /tmp/21336/sql/data/import_file.sql
它完美地运作。
我使用的图像:
FROM alpine:3.9
RUN apk update && \
apk add --no-cache mysql-client
CMD ["/bin/sh"]
在Linux上,<>表示从资源和Linux shell中断命令的输入输出到输入输出的2部分和其他需要传递的流。
现在使用docker命令,这两个命令是docker run -it CONTAINER mysql -h localhost -u user-ppassword dbName
</tmp/21336/sql/data/import_file.sql
。此外,/tmp/21336/sql/data/import_file.sql
文件正在主机中查找。
我通过创建一个脚本来解决它
#!/bin/sh
mysql -h ${1} -u ${2} -p${3} ${4} < ${5}
当我运行命令时:
docker run imageName myScript HostParam UserPram PasswordParam DBName FileName
有用