У меня том Docker, смонтированный непосредственно в папке / usr / local / share / ca-Certificates-.
certificate-folder:/usr/local/share/ca-certificates:ro
Я использую Tomcat для этой настройки, но может возникнуть аналогичная проблемас другими рамками, а также.База Dockerfile выглядит следующим образом:
FROM tomcat:8.5-jre8
# other Dockerfile configuration
CMD ["/start.sh"]
С файлом start.sh, содержащим ключевые строки
#!/usr/bin/env bash
update-ca-certificates
# other startup related tasks
catalina.sh run
Проблема с этой настройкой заключается в том, что она работает, пока я запускаю контейнеркак пользователь root.Однако, если я попытаюсь перейти к назначенному пользователю в конце Dockerfile с чем-то вроде этого
ENV TOMCAT_USER="tomcat" \
TOMCAT_UID="8080" \
TOMCAT_GROUP="tomcat" \
TOMCAT_GID="8080"
RUN groupadd -r --gid $TOMCAT_GID $TOMCAT_GROUP && \
useradd -r --uid $TOMCAT_UID --gid $TOMCAT_GID $TOMCAT_USER
RUN chown -R $TOMCAT_USER:$TOMCAT_GROUP /usr/local/tomcat
USER $TOMCAT_USER
Итак:
- Поскольку скрипт оболочки запускается как $TOMCAT_USER, он не может запустить «update-ca-Certificates» для установки сертификатов.
- Поскольку сертификаты не добавляются в Dockerfile, update-ca-Certificates не может быть запущен внутри Dockerfile.
Из-за этого у меня в конечном итоге возникают проблемы с SSL, подобные этой
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed:
sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Итак, как правильно решить проблему такого рода, если я все еще хочу запускать контейнер как назначенный $ TOMCAT_USER?