启动时 Dockerfile 入口点 Bash 脚本 运行,然后 运行 npm 脚本带有可附加的 CMD 参数
Dockerfile Entrypoint Bash script run upon start, then run npm script with appendable CMD argument
对于本地开发人员环境,我确保在每次启动时通过 /bin/sh 命令清除安装的 node_modules 目录,服务器启动前应该是 运行,但是在安装容器并 运行ning.
之后
期望的行为,指定的 NPM 脚本应该附加自“CMD”配置或其他 docker-compose 或 CLI 源
/bin/sh -c "rm -rf /usr/src/app/node_modules/* && npm run start
// OR
/bin/sh -c "rm -rf /usr/src/app/node_modules/* && npm run production
我假设这种脚本启动行为在 .sh 文件中更常见 运行 作为入口点,但我想从 Dockerfile
中指定完整命令
我当前的 Dockerfile
ENTRYPOINT ["/bin/sh", "-c", "rm -rf /usr/src/app/node_modules/* && npm run ${exec $@}"]
CMD [ "start" ]
我不确定如何处理 ENTRYPOINT 数组中“$@”周围双引号的转义。
当前正在从容器启动中接收此输出
start: 1: start: Bad substitution
我强烈建议将此启动程序写入其自己的 shell 脚本中:
#!/bin/sh
# Delete the library tree from the image; we're not going to use it.
rm -rf /usr/src/app/node_modules
# Interpret the command we're given as a specific `npm run` script.
exec npm run "$@"
现在您可以在您的 Dockerfile 中 COPY
这个脚本,并将 ENTRYPOINT
设置为 运行 它。不要在这里使用 sh -c
包装器。
COPY entrypoint.sh ./
ENTRYPOINT ["./entrypoint.sh"] # in JSON-array syntax
CMD ["start"]
如果你要像这样内联sh -c
,运行命令之后的任何参数都将作为位置参数[=17=]
、</code>和很快。通常 <code>[=17=]
是脚本名称(尝试将 echo "[=20=]"
添加到示例脚本中以查看结果)并且在构造 sh -c
时,您需要手动提供该参数。
ENTRYPOINT ["/bin/sh", "-c", "rm -rf node_modules && npm run \"\"", "script"]
CMD ["start"]
这些数组使用 JSON 语法,引号转义与 JSON 或 Javascript.
相同
对于本地开发人员环境,我确保在每次启动时通过 /bin/sh 命令清除安装的 node_modules 目录,服务器启动前应该是 运行,但是在安装容器并 运行ning.
之后期望的行为,指定的 NPM 脚本应该附加自“CMD”配置或其他 docker-compose 或 CLI 源
/bin/sh -c "rm -rf /usr/src/app/node_modules/* && npm run start
// OR
/bin/sh -c "rm -rf /usr/src/app/node_modules/* && npm run production
我假设这种脚本启动行为在 .sh 文件中更常见 运行 作为入口点,但我想从 Dockerfile
中指定完整命令我当前的 Dockerfile
ENTRYPOINT ["/bin/sh", "-c", "rm -rf /usr/src/app/node_modules/* && npm run ${exec $@}"]
CMD [ "start" ]
我不确定如何处理 ENTRYPOINT 数组中“$@”周围双引号的转义。
当前正在从容器启动中接收此输出
start: 1: start: Bad substitution
我强烈建议将此启动程序写入其自己的 shell 脚本中:
#!/bin/sh
# Delete the library tree from the image; we're not going to use it.
rm -rf /usr/src/app/node_modules
# Interpret the command we're given as a specific `npm run` script.
exec npm run "$@"
现在您可以在您的 Dockerfile 中 COPY
这个脚本,并将 ENTRYPOINT
设置为 运行 它。不要在这里使用 sh -c
包装器。
COPY entrypoint.sh ./
ENTRYPOINT ["./entrypoint.sh"] # in JSON-array syntax
CMD ["start"]
如果你要像这样内联sh -c
,运行命令之后的任何参数都将作为位置参数[=17=]
、</code>和很快。通常 <code>[=17=]
是脚本名称(尝试将 echo "[=20=]"
添加到示例脚本中以查看结果)并且在构造 sh -c
时,您需要手动提供该参数。
ENTRYPOINT ["/bin/sh", "-c", "rm -rf node_modules && npm run \"\"", "script"]
CMD ["start"]
这些数组使用 JSON 语法,引号转义与 JSON 或 Javascript.
相同