Bash 似乎entrypoint和shell表单cmd都是单独执行的

Bash 似乎entrypoint和shell表单cmd都是单独执行的,bash,shell,docker,db2,docker-build,Bash,Shell,Docker,Db2,Docker Build,我有一个从公共IBMDB2映像构建的定制映像,该映像有一个进行初始化的入口点。 为了在启动时创建多个数据库,我编写了自己的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/

我有一个从公共IBMDB2映像构建的定制映像,该映像有一个进行初始化的入口点。 为了在启动时创建多个数据库,我编写了自己的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
#/垃圾箱/垃圾箱

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

所以,您可以将entrypoint:/bin/sh和command:-c/init.sh放在一起,启动docker的结果将是:/bin/sh-c/init.sh


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

这个问题已经结束了,我犯了一个错误。这三个DBs是我自己创建的,另外,CMD只有在ENTRYPOINT存在时才是ENTRYPOINT的参数。请记住,
docker run
中的可选命令会覆盖CMD,但ENTRYPOINT不会。