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。