为什么在构建 Dockerfile 时出现语法错误“}”?

Why do I get Syntax error "}" unexpected in building 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

看起来问题出在最后一个大括号中,但我不明白为什么。 请帮忙!谢谢!

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

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

这以更简单的方式完成了同样的事情。