Docker容器中从URL运行.sh脚本报错,NordVPN安装求助
解决Docker容器中运行NordVPN安装脚本的语法错误问题
问题原因
- 第一个错误:
<()是Bash专属的进程替换语法,Docker的RUN指令默认使用/bin/sh(不支持该语法),因此触发Syntax error: "(" unexpected。 - 第二个错误:
sh < curl ...是误用重定向符号的写法,<会让系统把curl当成文件名尝试读取,而非执行curl命令下载脚本,所以出现cannot open curl: No such file。
解决方案
两种方法任选其一即可:
方法1:用管道传递脚本内容(推荐,兼容性更强)
直接通过管道将curl下载的脚本内容传给sh执行,sh完全支持这种语法:
# install nordvpn RUN curl -sSf https://downloads.nordcdn.com/apps/linux/install.sh | sh
方法2:指定Bash执行命令
如果想保留进程替换的写法,可以让RUN调用Bash来执行(Bash支持<()语法):
# install nordvpn RUN bash -c 'sh <(curl -sSf https://downloads.nordcdn.com/apps/linux/install.sh)' # 也可以简化成直接用Bash运行脚本 RUN bash <(curl -sSf https://downloads.nordcdn.com/apps/linux/install.sh)
额外提示
Docker容器默认以root用户运行,你Redis安装命令里的sudo可以去掉,不影响安装效果还能简化命令。
内容的提问来源于stack exchange,提问作者Cody Nolf
相关产品推荐
相关产品推荐

