[英]Dockerfile: ENTRYPOINT and CMD
例如,我在postgres映像的Dockerfile( https://github.com/docker-library/postgres/blob/master/10/Dockerfile )中看到,容器的启动定义如下:
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 5432
CMD ["postgres"]
如果我理解这一权利,则将参数postgres
传输到docker-entrypoint.sh
因此脚本中的$1
被postgres
替换,脚本将被执行。
现在我的问题是,是否可以基于postgres映像( FROM postgres
)定义自己的Dockerfile,但覆盖基本Dockerfile的CMD
并完成以在启动时首先执行命令,然后使用postgres
参数执行docker-entrypoint.sh
?
像这样:
FROM postgres
...
CMD <my-command> && [“postgres”]
您可以创建自己的my-entrypoint.sh
$ cat my-entrypoint.sh
#!/bin/bash
#do what you need here e.g. <my-command>
#next command will run postgres entrypoint will all params
docker-entrypoint.sh "$@"
而且您的docker文件将如下所示
FROM postgres
# your stuff
ENTRYPOINT ["my-entrypoint.sh"]
EXPOSE 5432
CMD ["postgres"]
是的,你可以做这样的事情
对于Dockerfile中的CMD命令,您有3种可能的语法
从中提取
https://docs.docker.com/engine/reference/builder/#cmd
CMD ["executable","param1","param2"] (exec form, this is the preferred form) CMD ["param1","param2"] (as default parameters to ENTRYPOINT) CMD command param1 param2 (shell form)
因此,您可以使用任何形式的shell形式(最后一种形式)看起来很适合
您还可以启动一个shell脚本来完成所有工作
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.