为什么在构建 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
这以更简单的方式完成了同样的事情。
当我尝试使用这行代码构建 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
这以更简单的方式完成了同样的事情。