我有这个简单的node.js图像:
FROM node:12
USER root
WORKDIR /app
COPY package.json .
COPY package-lock.json .
RUN npm i --production
COPY . .
ENTRYPOINT node dist/main.js
最后,我只想像这样将不同的参数传递给node dist/main.js
:
docker run -d my-image --foo --bar=3
使运行时的可执行文件为
node dist/main.js --foo --bar=3
我已经读过有关CMD / ENTRYPOINT的信息,有人知道吗,我不知道该怎么做?
答案 0 :(得分:1)
这似乎可行:
<android.support.v7.widget.RecyclerView
android:id="@+id/studentListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingBottom="56dp"/>
似乎等同于:
ENTRYPOINT ["node", "dist/main.js"]
CMD []
您似乎无法使用单引号-双引号是必需的,并且您必须使用shell语法。不确定为什么,但是这种样式不起作用:
ENTRYPOINT ["node", "dist/main.js"]
答案 1 :(得分:1)
我建议编写一个自定义入口点脚本来处理这种情况。
通常,您可能会发现在大多数情况下,最好使用CMD
到ENTRYPOINT
。特别是
docker run --rm -it myimage sh
真的很有用,使用ENTRYPOINT
运行主应用程序可以解决此问题。通常,我将要描述的入口点脚本模式实际上也非常有用,如果用CMD
描述了您的主要容器过程,那么很容易就可以使用。
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["node", "dist/main.js"]
该脚本本身是一个普通的Shell脚本,它通过命令行参数传递CMD
。通常以exec "$@"
结尾,以实际运行CMD
作为主要容器进程。
由于入口点脚本是shell脚本,并且它从docker run
命令行作为参数传递给了命令,因此您可以对其进行动态切换,并满足您的要求,以便能够传递其他命令您的脚本选项,以及我对能够运行任意程序而不是Node应用程序的要求。
#!/bin/sh
if [ $# = 1 ]; then
# no command at all
exec node dist/main.js
else
case "$1" of
-*) exec node dist/main.js "$@" ;;
*) exec "$@" ;;
esac
fi