当我尝试用这行代码构建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
这以一种简单得多的方式完成了同样的事情。