You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Dockerfile的CMD指令中使用--build-arg传入的PORT变量?

问题原因

  • 你使用的是exec形式的CMD(数组语法),该模式下Docker不会启动shell进程,不会解析${PORT}这类环境变量占位符,你写的echo ${PORT}会被直接作为普通字符串传给next命令,自然无法识别为端口号。
  • ARG是构建时变量,仅在镜像构建阶段生效,镜像构建完成后的容器运行阶段默认无法读取ARG的值,需要将ARG赋值给ENV才能在容器运行时保留该变量。

正确实现方式

修改Dockerfile如下:

FROM node:16.6.1-alpine3.14
RUN apk add dumb-init

ARG PORT
# 将构建时ARG赋值给运行时ENV,保证容器启动时可以读取到变量
ENV PORT=${PORT}

EXPOSE $PORT
ENTRYPOINT ["/usr/bin/dumb-init", "--"]
# 显式调用sh解析环境变量,exec用于替换sh进程保证信号正常传递
CMD ["sh", "-c", "exec npx next start -p ${PORT}"]

按照这个写法构建镜像时传入--build-arg PORT=3100即可正常指定端口,后续如果需要临时修改端口也可以在运行容器时通过-e PORT=xxx直接覆盖,无需重新构建镜像。

内容的提问来源于stack exchange,提问作者user3142695

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 00:45:03