Контейнер Redhat ubi8-micro без доверенных сертификатов корневого центра CA
Я хочу запустить простое приложение GO наregistry.access.redhat.com/ubi8/ubi-micro
изображение.
Но, к сожалению, я получаюx509: certificate signed by unknown authority
ошибки в моем приложении, потому что, похоже, в контейнерах ubi8-micro нет хранилища доверенных сертификатов root ca.
Пробовал что-то подобное в моем Dockerfile, но безуспешно:
FROM registry.access.redhat.com/ubi8/go-toolset as build
USER root
RUN yum update ca-certificates && \
update-ca-trust
COPY . .
RUN go mod tidy && \
go build .
FROM registry.access.redhat.com/ubi8/ubi-micro
COPY --from=build /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt /etc/pki/tls/certs/ca-bundle.trust.crt
COPY --from=build /opt/app-root/src/my-app .
RUN ./my-app # Go app gives 509 error on GET https://google.com
Основная функция в Go
func main() {
_, err := http.Get("https://www.google.com")
if err != nil {
log.Printf("Error during Get is: %s", err) // throw 509
}
}
ОБНОВЛЕНИЕ/РЕШЕНИЕ
Исправил это с помощьюubi8-minimal
вместоubi8-micro
как бегун
См. также (фиксации) на: https://github.com/michelmeeuwissen/redhat-go-example .
1 ответ
Неясно, на каком этапе вы получаете ошибку, поэтому я расскажу обо всем.
На хосте вам необходимо добавить собственный сертификат CA в хранилище доверенных сертификатов вашей системы (/etc/pki/ca-trust/source/anchors
) и бегиupdate-ca-trust
.
При создании контейнера я бы рекомендовал всегда предоставлять хранилище доверенных сертификатов вашего хоста контейнеру, даже если оно вам действительно нужно только при доступе к сети (buildah build --volume /etc/pki/ca-trust:/etc/pki/ca-trust:ro
).
При запуске контейнера откройте хранилище доверенных сертификатов хоста для контейнера (--volume /etc/pki/ca-trust:/etc/pki/ca-trust:ro
в течениеcreate
илиrun
).
Поскольку go изначально просматривает хранилище доверенных сертификатов вашей системы, в отличие от многих других сред выполнения, которые создают свои собственные, которые вам нужно переопределить, это должно быть все, что вам нужно.