首页 > 解决方案 > 似乎入口点和 shell 形式的 cmd 都是单独执行的

问题描述

我有一个从公共 IBM Db2 映像构建的自定义映像,该映像具有一个执行初始化的入口点。为了在启动时创建多个数据库,我编写了自己的 init.sh 并将其放在 CMD 子句中。'docker ps' 中的命令如下:

    /var/db2_setup/lib/setup_db2_instance.sh /bin/sh -c /init.sh

init.sh 是

    #!/bin/sh

    su - db2inst1 << EOF
    export PATH=$PATH:/opt/ibm/db2/V11.1/bin
    db2 create database DB1
    db2 create database DB2
    db2 create database DB3
    EOF

据我所知,应该忽略以下“/bin/sh -c /init.sh”,因为我检查了 setup_db2_instance.sh 文件,其中没有处理像 /bin/sh 这样的参数的代码。

但是db2初始化成功,三个db都创建好了。有没有人遇到过这种情况或有任何参考解释为什么会发生这种情况?

标签: bashshelldockerdb2docker-build

解决方案


入口点和命令之间的关系是:命令是入口点的参数。这就是为什么您现在看到奇怪的命令的原因,因为 /var/db2_setup/lib/setup_db2_instance.sh 可能是图像的默认入口点,并且您通过命令传递将 /bin/sh -c /init.sh 作为参数添加到它。因此,对于您的情况,您需要覆盖容器的入口点而不是命令。

因此,您可以输入入口点:/bin/sh 和命令:-c /init.sh 并导致启动 docker 将是:/bin/sh -c /init.sh

或者你可以把空的入口点和完整的命令放在命令部分,或者把空的命令部分和完整的命令放在入口点 - 由你决定。


推荐阅读