Dockerfile:ENTRYPOINT和CMD
例如,我在postgres映像()的Dockerfile中看到,容器的启动定义如下:Dockerfile:ENTRYPOINT和CMD,docker,dockerfile,Docker,Dockerfile,例如,我在postgres映像()的Dockerfile中看到,容器的启动定义如下: ENTRYPOINT ["docker-entrypoint.sh"] EXPOSE 5432 CMD ["postgres"] FROM postgres ... CMD <my-command> && [“postgres”] 如果我理解正确,参数postgres被转移到docker entrypoint.sh中,因此脚本中的$1被替换为postgres,脚本将被执行 现在我
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 5432
CMD ["postgres"]
FROM postgres
...
CMD <my-command> && [“postgres”]
如果我理解正确,参数postgres
被转移到docker entrypoint.sh
中,因此脚本中的$1
被替换为postgres
,脚本将被执行
现在我的问题是,我是否可以基于postgres图像(来自postgres
)定义自己的Dockerfile,但覆盖基本Dockerfile的CMD
,并完成在启动时首先执行命令,然后使用postgres
参数执行docker entrypoint.sh
大概是这样的:
ENTRYPOINT ["docker-entrypoint.sh"]
EXPOSE 5432
CMD ["postgres"]
FROM postgres
...
CMD <my-command> && [“postgres”]
来自postgres的
...
CMD&[“postgres”]
是的,你可以做这样的事
对于Dockerfile中的CMD命令,有3种可能的语法
摘自
CMD[“executable”、“param1”、“param2”](exec表单,这是首选表单)
CMD[“param1”、“param2”](作为入口点的默认参数)
CMD命令param1 param2(外壳形式)
所以你可以使用任意一个,为了做你想做的事情,shell形式(最后一个)看起来很合适
您还可以启动一个shell脚本来完成所有工作您可以创建自己的
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 "$@"
我认为这是一个误会。或者,请给出一个我想要实现的语法示例。另外,不允许PostgresSQL的根执行。我猜您没有创建非特权用户,因此Dockerfile没有
user
指令。您应该发布DockerFile,但postgres entrypoint脚本不应该创建此用户(请参阅)