基于ubuntu:22.04的Docker镜像用户创建:bash与dash兼容问题咨询
问题解答
1. 可以用bash执行指定命令,同时保留dash为默认shell
直接在RUN指令里显式调用bash来执行你的命令即可,这样系统默认shell仍为dash,仅当前RUN命令用bash解析执行。修改后的命令如下:
RUN bash -c 'export MUNGEUSER=1001 && id -u munge &>/dev/null || useradd -m -c "MUNGE Uid '\''N'\'' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge -s /sbin/nologin munge'
这里用单引号包裹bash命令内容,避免Dockerfile的变量解析冲突,同时处理好原命令里的单引号转义。
2. 需要改写&>/dev/null以兼容dash
&>/dev/null是bash的扩展语法,dash作为POSIX标准shell不支持这种写法。要兼容dash,需改为POSIX标准的重定向格式:> /dev/null 2>&1。
如果不想依赖bash,直接用dash执行的话,修改后的命令如下:
RUN export MUNGEUSER=1001 && id -u munge > /dev/null 2>&1 || useradd -m -c "MUNGE Uid 'N' Gid Emporium" -d /var/lib/munge -u $MUNGEUSER -g munge -s /sbin/nologin munge
内容的提问来源于stack exchange,提问作者Black Dynamite
相关产品推荐
相关产品推荐

