好像入口点和外壳形式的cmd都是分开执行的

时间:2018-09-03 05:28:18

标签: bash shell docker db2 docker-build

我有一个从公共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。有没有人遇到过这个问题或有任何参考资料解释为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

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

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

或者您可以将空的入口点和完整命令放在命令部分中,或者将空的命令部分然后将完整命令写入入口点中-由您决定。