Dockerfile:是否可以引用重写的入口点和cmd?

我试图从这里使用MySQL 5.6build立一个图像作为基础图像。 我需要在数据库启动之前做一些初始化,所以我需要覆盖入口点:

# Stuff in my Dockerfile ... COPY my-entrypoint.sh /usr/local/bin/ ENTRYPOINT ["my-entrypoint.sh"] 

我的入口也相当简单:

 #!/bin/bash echo "Running my-entrypoint.sh" # My initialization stuff here ... # Call mysql entrypoint /usr/local/bin/docker-entrypoint.sh mysqld 

这似乎工作,但我宁愿不必硬编码我的脚本(或我的Dockerfile)中的mysql入口点。 有没有办法在我的Dockerfile中引用重写的入口点,以便它可用于我的入口点脚本? 也许这样的事情?

 COPY my-entrypoint.sh /usr/local/bin/ ENTRYPOINT ["my-entrypoint.sh", BASE_ENTRYPOINT, BASE_CMD] 

2种方式:

只要在指定图像后将其传入,之后的所有内容都将成为CMD并附加到您的ENTRYPOINT 。 所以…

 # Stuff in my Dockerfile ... COPY my-entrypoint.sh /usr/local/bin/ ENTRYPOINT ["my-entrypoint.sh"] 

然后docker run ... image <your-entrypoint-etc>然后只是让你的自定义入口点拿起第一个参数,然后使用你需要的。

第二种方法,只需在运行时将其作为环境variables传递。

docker run ... -e MYSQL_ENTRYPOINT=<something> ...

并在您的入口脚本引用envvariables... $MYSQL_ENTRYPOINT ...

它必须出现在某个地方,否则你不能得到这样的信息。

  • 选项1:在Dockerfile使用ENV作为以前的入口Dockerfile ,然后在您自己的入口点引用它Dockerfile

    Dockerfile:

     FROM alpine:3.3 ENV MYSQL_ENTRYPOINT "/usr/bin/mysql mysqld" ADD entrypoint.sh / ENTRYPOINT ["/entrypoint.sh"] 

    Entrypoint.sh:

     #!/bin/sh echo $MYSQL_ENTRYPOINT 
  • 选项2:只需将先前的入口点命令作为parameter passing给入口点:

    Dockerfile:

     FROM alpine:3.3 ADD entrypoint.sh / ENTRYPOINT ["/entrypoint.sh"] CMD ["/usr/bin/mysql mysqld"] 

    Entrypoint.sh:

     #!/bin/sh echo $1 

我个人更喜欢选项#1。