【问题标题】:Dockerfile execute additional scripts in entrypointDockerfile 在入口点执行附加脚本
【发布时间】:2020-03-21 15:02:46
【问题描述】:

我正在为glats/alpine-lamp 的开发工作构建一个lamp 容器。我想在容器加载后运行一些额外的 sql 命令(创建数据库和一些测试用户)。我创建了一个新的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 中,我正在执行父容器的entrypoint script,但是由于此脚本不会退出并且不会在后台运行,因此我的添加永远不会被执行。我尝试了几种不同的调用父脚本的方法,包括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"

【问题讨论】:

    标签: docker docker-entrypoint


    【解决方案1】:

    我认为基于在mysql运行后还有其他方法可以运行初始查询的事实,你应该尝试从另一个角度来解决这个问题。 例如你可以使用volumes来设置./conf/docker-entrypoint-initdb.d 类似于this 显示的内容

    编辑: 您也可以将 .sh 文件放在目录中,而不仅仅是 .sql 文件。 它们按字母顺序执行。 有更好的解释herehere

    【讨论】:

    • 感谢@vahid 的想法。我认为这适用于 SQL 部分,但在父容器的初始化完成后,我仍然需要运行一些清理工作(不是 SQL)。
    • @user101289 我编辑了答案,你也可以把.sh文件放在那里。
    猜你喜欢
    • 2023-04-02
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 2021-01-25
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2017-11-14
    相关资源
    最近更新 更多