似乎入口点和 shell 表单 cmd 都是单独执行的
Seems like both entrypoint and shell form cmd are separately executed
我有一个从 public IBM Db2 映像构建的自定义映像,该映像具有执行初始化的入口点。
为了在启动时创建超过 1 个数据库,我编写了自己的 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 文件,其中没有处理参数的代码,例如 [=22] =].
但是db2初始化成功,三个DB都创建了。有没有人遇到过这个或有任何参考解释为什么会这样?
入口点和命令之间的关系是:命令是入口点的参数。这就是为什么您现在看到奇怪的命令,因为 /var/db2_setup/lib/setup_db2_instance.sh 可能是图像的默认入口点,并且您通过命令传递将 /bin/sh -c /init.sh 作为参数添加到它。因此,对于您的情况,您需要覆盖容器的入口点而不是命令。
因此您可以输入入口点:/bin/sh 和命令:-c /init.sh 并且启动 docker 的结果将是:/bin/sh -c /init.sh
或者您可以只在命令部分放置空入口点和完整命令,或者在入口点放置空命令部分并写入完整命令 - 由您决定。
我有一个从 public IBM Db2 映像构建的自定义映像,该映像具有执行初始化的入口点。 为了在启动时创建超过 1 个数据库,我编写了自己的 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 文件,其中没有处理参数的代码,例如 [=22] =].
但是db2初始化成功,三个DB都创建了。有没有人遇到过这个或有任何参考解释为什么会这样?
入口点和命令之间的关系是:命令是入口点的参数。这就是为什么您现在看到奇怪的命令,因为 /var/db2_setup/lib/setup_db2_instance.sh 可能是图像的默认入口点,并且您通过命令传递将 /bin/sh -c /init.sh 作为参数添加到它。因此,对于您的情况,您需要覆盖容器的入口点而不是命令。
因此您可以输入入口点:/bin/sh 和命令:-c /init.sh 并且启动 docker 的结果将是:/bin/sh -c /init.sh
或者您可以只在命令部分放置空入口点和完整命令,或者在入口点放置空命令部分并写入完整命令 - 由您决定。