繁体   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