运行Docker容器时,如何向npm run start传递参数?
正确传递Node.js应用参数到Docker容器的方法
问题原因
你的Dockerfile中ENTRYPOINT使用了shell形式(ENTRYPOINT npm run start),这种写法会让Docker在shell环境中执行命令,导致传递的参数无法被npm正确识别为启动脚本的参数(npm需要通过--来区分自身参数和脚本参数)。
解决方案
方案一:修改Dockerfile为exec格式(推荐)
将Dockerfile中的ENTRYPOINT改为exec数组格式,确保参数能正确传递:
# 替换原有的ENTRYPOINT行 ENTRYPOINT ["npm", "run", "start"]
重新构建镜像:
docker build -t demo:latest .
之后用以下命令启动容器,参数即可正确传递给应用:
docker run demo -- --host "127.0.0.1" --port 3306 --user "root"
方案二:不修改Dockerfile,直接用shell包裹完整命令
如果不想重新构建镜像,可以通过sh -c直接执行完整的启动命令:
docker run demo sh -c 'npm run start -- --host "127.0.0.1" --port 3306 --user "root"'
说明
你之前尝试的命令中-- -- host多了一个空格(--和host之间不应有空格),且因shell形式的ENTRYPOINT导致参数解析异常,以上两种方法均可解决该问题。
内容的提问来源于stack exchange,提问作者Victor
相关产品推荐
相关产品推荐

