【发布时间】:2020-11-07 12:34:02
【问题描述】:
我是 Windows 上 WSL + docker 桌面的新手。通常这不会是一个问题。但我不知道我在这里做错了什么。我有一个脚本 /usr/local/bin/mysqlcmd 将 SQL 查询作为 arg 并应该在执行 docker exec 命令后将其打印出来。
#!/bin/bash
args="$1"
echo "Recieved $args"
sql_query="'mysql -u root -proot --database dev --batch -e \"$args\"'"
echo "SQL query: $sql_query"
docker exec -it hellomaven_db_1 bash -c 'mysql -u root -proot --database dev --batch -e "select * from location limit 10"'
echo "FAILURE"
docker exec -it hellomaven_db_1 bash -c "$sql_query"
当我运行mysqlcmd 'select * from location limit 4' 时的输出是
Recieved select * from location limit 10
SQL query: 'mysql -u root -proot --database dev --batch -e "select * from location limit 4"'
mysql: [Warning] Using a password on the command line interface can be insecure.
id lat lon datetime_ts datetime_id
1 -0.1997 -34.7696 2020-11-06 11:32:37 1604662359
2 -0.682 -34.4279 2020-11-06 11:32:47 1604662369
3 -1.1641 -34.0864 2020-11-06 11:32:57 1604662378
4 -1.6714 -33.7267 2020-11-06 11:33:06 1604662388
FAILURE
bash: mysql -u root -proot --database dev --batch -e "select * from location limit 10": command not found
failed to resize tty, using default size
%
让我烦恼的是 bash: mysql -u root -proot --database dev --batch -e "select * from location limit 10": command not found。两个 docker exec 命令都是相同的。或者我错过了什么?
提前致谢。
【问题讨论】:
-
您应该能够使用主机上的
mysql客户端工具或使用更强大语言的 MySQL 客户端库直接连接到数据库的已发布端口;你在这里不需要docker exec。 -
是的,它确实以这种方式工作,
docker exec -it hellomaven_db_1 mysql -u root -proot --database dev -e "select * from location limit 4"。但是,如果我在脚本中使用相同的命令(将 sql 命令作为 arg 传递),它不会。退出OCI runtime exec failed: exec failed: container_linux.go:349: starting container process caused "exec: \"mysql -u root -proot --database dev --batch -e \\\"select * from location limit 10\\\"\": executable file not found in $PATH": unknown
标签: windows bash docker windows-subsystem-for-linux