Как правило, вы должны найти способы избежать docker exec
, особенно для использования по сценарию, как это.(Вполне возможно, что автоматизированные задачи удалят и воссоздают контейнеры и не будут выполнять ваши шаги ручной настройки. Это вдвойне верно в кластеризованных средах, таких как Docker Swarm или Kubernetes.)
В случае, если у вас есть некоторые существующиеФайл хранилища ключей, который вы просто хотите вставить в контейнер, самый простой способ - вставить его во время запуска, используя опцию docker run -v
.Вам уже нужен полностью заполненный файл хранилища ключей.
docker run \
-v $PWD/keystore.jks:/usr/lib/java/jre/lib/security/keystore.jks \
...
Если вы не можете внедрить полностью заполненный файл хранилища ключей во время запуска, вы можете написать скрипт, который запускается во время запуска контейнера.Он ищет какой-то известный каталог, запускает команду keytool
для каждого файла, а затем запускает команду, переданную в качестве аргументов командной строки.
#!/bin/sh
if [ -d /cert ]; then
for f in /cert/*.cer; do
keytool ... -file "$f"
done
fi
exec "$@"
В вашем Dockerfile скопируйте этот скриптв и сделать его ВХОДНОЙ ТОЧКОЙ.Если у вас ранее была строка ENTRYPOINT ["java", ...]
, измените ее на CMD.Это будет выглядеть примерно так:
FROM java:8
...
COPY entrypoint.sh /app
ENTRYPOINT ["/app/entrypoint.sh"]
CMD ["java", "-jar", "/app/myapp.jar"]
Затем, когда вы запустите контейнер, введите каталог /cert
docker run \
-v $PWD/cert:/cert \
...