Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dockerfile在entrypoint中执行其他脚本_Docker_Docker Entrypoint - Fatal编程技术网

Dockerfile在entrypoint中执行其他脚本

Dockerfile在entrypoint中执行其他脚本,docker,docker-entrypoint,Docker,Docker Entrypoint,我正在为开发工作构建一个lamp容器。我想在容器加载后运行一些额外的sql命令(创建一个DB和一些测试用户)。我创建了一个新的init.sh脚本,作为Dockerfile的入口点运行,如下所示: FROM glats/alpine-lamp ENV MYSQL_ROOT_PASSWORD=password COPY init.sh /init.sh RUN chmod u+x /init.sh ENTRYPOINT ["/init.sh"] 在我的init.sh中,我正在执行父容器的,但由于此

我正在为开发工作构建一个
lamp
容器。我想在容器加载后运行一些额外的sql命令(创建一个DB和一些测试用户)。我创建了一个新的
init.sh
脚本,作为Dockerfile的入口点运行,如下所示:

FROM glats/alpine-lamp
ENV MYSQL_ROOT_PASSWORD=password
COPY init.sh /init.sh
RUN chmod u+x /init.sh
ENTRYPOINT ["/init.sh"]
在我的
init.sh
中,我正在执行父容器的,但由于此脚本不退出,也不在后台运行,因此我的添加永远不会执行。我尝试了几种调用父脚本的不同方法,包括
source entry.sh
/bin/sh/entry.sh
,以及
(/entry.sh)
。我还尝试使用
/entry.sh&
将其发送到后台,但这也不起作用

当父脚本不退出时,向容器添加其他入口点脚本的正确方法是什么

编辑:我的初始化脚本

#!/bin/sh
#run the parent container's entry script
/entry.sh &

# now run the rest of the stuff that needs to happen
mysql -u root -ppassword -e "CREATE DATABASE IF NOT EXISTS mydatabase"

我认为,在mysql运行之后,还有其他方法可以运行初始查询,因此您应该尝试从另一个角度来处理这个问题。 例如,您可以使用卷设置
/conf/docker入口点initdb.d
有点像正在放映的东西

编辑: 您还可以将.sh文件放在目录中,它不仅仅是.sql文件。 它们是按字母顺序执行的。
有更好的解释,谢谢你的想法@vahid。我认为这对SQL部分有效,但在父容器的初始化完成后,我仍然需要运行一些清理工作(不是SQL)。@user101289我编辑了答案,您也可以将.sh文件放在那里。