Docker 中的条件 CMD

eks*_*eks 7 node.js npm docker

CMD ["npm", "run", "dev"]如果 package.json 中存在开发脚本,我想运行,否则CMD ["npm", "start"]

有没有一种惯用的码头工人方式来做到这一点?我想我的 CMD 可能是一个 bash 脚本,它检查“npm run dev”的存在。有没有比这更清洁的方法?

adr*_*anu 9

您可以动态创建bash包含适当命令的脚本:

RUN bash -c "if npm run | grep -q dev ; then echo npm run dev > run.sh; else echo npm start > run.sh; fi; chmod 777 run.sh;"
CMD ./run.sh
Run Code Online (Sandbox Code Playgroud)
  • if npm run | grep -q dev将检查dev脚本是否存在于package.json. npm run不带参数运行将列出所有可运行的脚本,并且仅当其中包含时才grep -q dev返回。truedev

  • echo command > run.sh将使用提供的命令创建一个文件

  • chmod 777 run.sh将使run.sh可执行文件

  • CMD ./run.sh将执行创建的文件


Rav*_*ndo -1

读取 Dockerfile 中的 package.json 没有任何意义。您可以做的是为开发环境创建单独的 Dockerfile 和另一个不包含“dev”命令的 Dockerfile。这种方式还可以让您更好地控制正在构建的 Docker 镜像。