簡體   English   中英

Dockerfile:ENTRYPOINT和CMD

[英]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因此腳本中的$1postgres替換,腳本將被執行。

現在我的問題是,是否可以基於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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM