多行Bash Docker Run命令执行失败,单行命令正常,求排查原因
解决多行Docker Run命令执行失败的问题
问题场景
执行以下多行Docker Run命令时出现报错:
docker run \ --rm \ --name somedb \ -v "$(pwd)/database:/var/lib/mysql/" \ -p "3306:3306" \ -e MARIADB_USER=dbuser \ -e MARIADB_PASSWORD=dbuserpwd \ -e MARIADB_ROOT_PASSWORD=rootpwd \ -d \ mariadb:10.10-jammy
返回的错误信息:
docker: invalid reference format. See 'docker run --help'. -e : commande introuvable ## 法语含义:命令未找到
但将命令合并为单行后却能正常执行:
docker run --rm --name somedb -v "$(pwd)/database:/var/lib/mysql/" -p "3306:3306" -e MARIADB_USER=dbuser -e MARIADB_PASSWORD=dbuserpwd -e MARIADB_ROOT_PASSWORD=rootpwd -d mariadb:10.10-jammy
问题原因
错误的核心在于多行命令中**-e MARIADB_USER=dbuser \ 这一行的反斜杠后面多了一个空格**。
在Shell环境中,反斜杠\用于换行转义,要求它必须是所在行的最后一个字符。如果反斜杠后带有空格,Shell不会将其识别为换行转义符,反而会把\当成普通字符处理,导致后续的-e被解析成独立命令执行,既触发了"命令未找到"的错误,也让Docker因命令格式异常返回"invalid reference format"。
解决方法
删除所有行末尾反斜杠后面的空格,确保每个反斜杠都是所在行的最后一个字符。修正后的命令如下:
docker run \ --rm \ --name somedb \ -v "$(pwd)/database:/var/lib/mysql/" \ -p "3306:3306" \ -e MARIADB_USER=dbuser \ -e MARIADB_PASSWORD=dbuserpwd \ -e MARIADB_ROOT_PASSWORD=rootpwd \ -d \ mariadb:10.10-jammy
内容的提问来源于stack exchange,提问作者mszmurlo
相关产品推荐
相关产品推荐

