请教Dockerfile中三条指定命令的具体执行作用
Dockerfile中三条命令的功能详解
你编写的Dockerfile片段如下:
FROM node:16-slim AS base RUN apt-get update RUN apt-get -y install build-essential libcairo2-dev libpango1.0-dev libjpeg-dev libgif-dev librsvg2-dev RUN useradd -ms /bin/bash xyz-deployer WORKDIR /srv/app RUN chmod -R g+rwX /srv/app RUN yarn global add ts-node@^10.1.0
针对其中三条命令的功能,具体解释如下:
RUN useradd -ms /bin/bash xyz-deployer
创建一个名为xyz-deployer的系统用户:-m参数会自动为该用户创建对应的家目录;-s /bin/bash指定该用户的默认登录shell为bash。
这么做的核心目的是避免容器运行时直接使用root用户,降低容器运行的安全风险。
WORKDIR /srv/app
将容器内的默认工作目录设置为/srv/app,后续所有的RUN、COPY、CMD等指令都会基于这个目录执行,效果等同于在容器内执行cd /srv/app并保持该路径为后续操作的默认路径。RUN chmod -R g+rwX /srv/app
递归修改/srv/app目录下所有文件和子目录的权限:g+rw给目录/文件的所属组添加读、写权限;X表示仅当目标是目录或者本身已是可执行文件时,才添加可执行/进入权限(避免给普通文本文件添加不必要的可执行权限)。
这条命令是为了确保后续容器运行时,非root用户(比如刚创建的xyz-deployer)能对工作目录进行正常的读写操作。
内容的提问来源于stack exchange,提问作者Alwaysblue
相关产品推荐
相关产品推荐

