为什么我在构建 Dockerfile 时收到语法错误"}"意外?



当我尝试用这行代码构建Dockerfile时:

RUN modifyPermissions() {if [ -n "${OWNER}" ]; then 
chown "${OWNER}":zagrebgroup -R /var/log/app /mnt;
else
chown 1001:zagrebgroup -R /var/log/app /mnt;
fi
}

我有这个错误:

/bin/sh: 1: Syntax error: "}" unexpected

看起来问题在最后一个花括号里,但我不明白为什么。请帮忙!Tnx!

原始语法错误的来源是{后面必须跟空白。这在语法上是正确的:

RUN modifyPermissions() { if [ -n "${OWNER}" ]; then 
chown "${OWNER}":zagrebgroup -R /var/log/app /mnt;
else
chown 1001:zagrebgroup -R /var/log/app /mnt;
fi
}

但正如人们在评论中指出的那样,每个RUN命令都在一个单独的shell中执行,因此在一个RUN语句中定义的函数、变量等对其他语句不可用。这样的函数唯一有用的方法是在相同的RUN脚本中使用该函数:

RUN modifyPermissions() { if [ -n "${OWNER}" ]; then 
chown "${OWNER}":zagrebgroup -R /var/log/app /mnt;
else
chown 1001:zagrebgroup -R /var/log/app /mnt;
fi
}; 
modifyPermissions

在这种情况下,你没有为自己节省任何精力;你可能以及将整个事情简化为:

RUN chown "${OWNER:-1001}":zagrebgroup -R /var/log/app /mnt

这以一种简单得多的方式完成了同样的事情。

最新更新