繁体   English   中英

Dockerfile:是否可以引用覆盖的入口点和cmd?

[英]Dockerfile: is it possible to reference overridden entrypoint and cmd?

我正在尝试使用mysql 5.6从此处构建映像作为基本映像。 我需要在数据库启动之前进行一些初始化,所以我需要覆盖入口点:

# 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]

它必须以某种方式出现在某个地方,否则您将无法获得此类信息。

  • 选项1:对Dockerfile先前入口点使用ENV ,然后在您自己的entrypoint.sh中引用它:

    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:只需将先前的entrypoint命令作为参数传递给您的入口点:

    Dockerfile:

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

    Entrypoint.sh:

     #!/bin/sh echo $1 

我个人更喜欢选择#1。

2种方式:

您只需在指定图片后将其传递,之后的所有内容就会变成CMD并附加到您的ENTRYPOINT 所以...

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

然后docker run ... image <your-entrypoint-etc>然后让您的自定义入口点拾取第一个arg并根据需要使用它。

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

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

在入口点脚本中,请参考env变量... $MYSQL_ENTRYPOINT ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM