【问题标题】:Bash script with docker command not running when passing argument | Env: WSL2 with docker desktop传递参数时,带有 docker 命令的 Bash 脚本未运行 |环境:带有 docker 桌面的 WSL2
【发布时间】: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


【解决方案1】:

问题出在单引号对上,试试:

sql_query="mysql -u root -proot --database dev --batch -e \"$args\""

【讨论】:

    猜你喜欢
    • 2018-06-05
    • 2021-04-09
    • 2017-09-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-03
    • 1970-01-01
    • 2020-10-05
    相关资源
    最近更新 更多