我尝试使用来自here的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]
答案 0 :(得分:0)
它必须以某种方式出现在某个地方,否则你无法得到这样的信息。
选项1:对ENV
中的先前入口点使用Dockerfile
,然后在您自己的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:只需将上一个入口点命令作为参数传递给入口点:
Dockerfile:
FROM alpine:3.3
ADD entrypoint.sh /
ENTRYPOINT ["/entrypoint.sh"]
CMD ["/usr/bin/mysql mysqld"]
Entrypoint.sh:
#!/bin/sh
echo $1
我个人更喜欢选项#1。
答案 1 :(得分:0)
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 ...