[英]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.