Похоже, что и точка входа, и командная форма оболочки выполняются отдельно - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть настроенный образ, созданный из общедоступного образа 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, где нет кодов, имеющих дело с param, например /bin/sh.

Но db2 успешно инициализирован, и три базы данных созданы. Кто-нибудь сталкивался с этим или есть какие-либо ссылки, объясняющие, почему это происходит?

1 Ответ

0 голосов
/ 03 сентября 2018

Отношение между точкой входа и командой: команда является аргументом для точки входа. Вот почему теперь вы видите странную команду, так как /var/db2_setup/lib/setup_db2_instance.sh, вероятно, является точкой входа изображения по умолчанию, и вы добавляете / bin / sh -c /init.sh в качестве аргумента, передавая ее по команде. Поэтому для вашего случая вам нужно переопределить точку входа для контейнера вместо команды.

Таким образом, вы можете указать точку входа: / bin / sh и команду: -c /init.sh, в результате чего запустится docker: / bin / sh -c /init.sh

Или вы можете просто указать пустую точку входа и полную команду в разделе команд или поместить пустой раздел команд и написать полную команду в точке входа - до вас.

...