代码之家  ›  专栏  ›  技术社区  ›  user3142695

如何在dockerfile中使用CMD内部的变量?

  •  0
  • user3142695  · 技术社区  · 4 年前

    正如您在这个Dockerfile中看到的,我将端口号传递为 --build-arg 在构建时。现在我要跑了 npx next start -p ${PORT} :

    FROM node:16.6.1-alpine3.14
    RUN apk add dumb-init
    
    ARG PORT
    
    EXPOSE $PORT
    ENTRYPOINT ["/usr/bin/dumb-init", "--"]
    CMD ["npx", "next", "start", "-p", "echo ${PORT}"]
    

    但这是行不通的。应用程序正在默认的3000端口上运行。如果我这样做了

    CMD ["npx", "next", "start", "-p", "3100"]
    

    该应用程序正在以3100的预期速度运行。但是为什么我不能使用变量呢?

    2 回复  |  直到 4 年前
        1
  •  1
  •   Paolo    4 年前

    您正在使用的格式( exec )不行。从 docs :

    exec表单不会调用命令shell。这意味着正常的shell处理不会发生。

    相反,您可以直接执行shell:

    CMD ["sh", "-c", "npx next start -p $PORT"]
    
        2
  •  -2
  •   user3142695    4 年前

    设置一个env变量并在CMD中使用:

    ARG PORT
    ENV portValue=$PORT
    CMD ["npx", "next", "start", "-p", "${portValue}"]
    
    推荐文章