도커 컨테이너 SSL 인증서


87

docker pull에서 가져온 이미지에 SSL 인증서를 추가하는 우아한 방법이 있습니까?.

/ etc / ssl / certs에 파일을 추가하고 update-ca-certificates를 실행하는 간단하고 재현 가능한 방법을 찾고 있습니다. (우분투와 데비안 이미지를 포함해야합니다).

CoreOS에서 docker를 사용하고 있으며 coreos 머신은 필요한 SSL 인증서를 신뢰하지만 docker 컨테이너에는 분명히 기본값 만 있습니다.

docker run --entrypoint=/bin/bash그런 다음 cert를 추가하고 실행 하려고 시도 update-ca-certificates했지만 이것은 진입 점을 영구적으로 재정의하는 것 같습니다.

나는 또한 지금 궁금 /etc/ssl/certs합니다. 호스트 머신 사본에서 컨테이너에 마운트하는 것이 더 우아 할까요? 이렇게하면 컨테이너가 호스트와 동일한 것을 신뢰하도록 암시 적으로 허용됩니다.

나는 모든 것을 사임하는 성가신 프록시와 함께 일하고 있습니다 :(. SSL을 깨고 컨테이너가 작동하기에 이상하게 만듭니다.


3
이미지를 사용하고 파일을 추가하고 update-ca-certificates를 실행하는 Dockerfile을 만드는 것에 대해 생각해 보셨습니까? 아니면 당신이 찾고있는 것이 아닙니까?
Céline Aussourd 2014 년

일부 이미지에 대해 수행했습니다. 나쁜 해결책이 아닙니다. 그래도 자신의 모든 이미지를 빌드해야합니다.
Beau Trepp

답변:


75

다음을 사용하여 Docker 컨테이너에 인증서를 마운트합니다 -v.

docker run -v /host/path/to/certs:/container/path/to/certs -d IMAGE_ID "update-ca-certificates"

5
꽤 멋져요. 컨테이너가 동일한 스타일의 ssl_certs를 사용하는 경우 update-ca-certificates 줄도 필요하지 않을 것입니다. 호스트는 이미이를 수행했을 것입니다.
Beau Trepp 2014 년

2
클라우드에서 구축하고 있다면?
Ewoks

26

나는 이것과 비슷한 것을 시도하고 있습니다. 위에서 언급했듯이 사용자 지정 Dockerfile (기본 이미지로 가져온 이미지 사용), ADD인증서, RUN update-ca-certificates. 이렇게하면이 새 이미지에서 컨테이너를 시작할 때마다 일관된 상태를 갖게됩니다.

# Dockerfile
FROM some-base-image:0.1
ADD you_certificate.crt:/container/cert/path
RUN update-ca-certificates

docker buildDockerfile이 IMAGE_ID를 생성 했다고 가정 해 보겠습니다 . 다음 docker run -d [any other options] IMAGE_ID에서는 해당 명령으로 시작된 컨테이너에 인증서 정보가 포함됩니다. 간단하고 재현 가능합니다.


일반적으로 다른 답변에서 언급 한 docker run -v 솔루션을 선호합니다. 그러나 Docker 빌드 중에 인증서가 필요한 경우 솔루션도 작동합니다. 감사!
바스티안

9
나는 인증서를 공개 컨테이너에 넣는 것을 조심할 것입니다. 다른 사람이 컨테이너를 가져와 개인 인증서를 추출 할 수 있습니다.
skibum55

4
이것은 매우 좋은 점이지만 위의 솔루션은 아무것도 공개하지 않습니다. 이는 로컬로 빌드 된 다음 비공개로 사용되는 이미지에 자체 인증서를 추가하기위한 것입니다. 당신은 수있는 다음 공용 저장소에 결과 이미지를 밀어하지만 당신이 말한대로 그 나쁜 생각 일 것이다.
shudgston

9
인증서는 언제부터 비밀입니까?
techraf

3
서버에는 게시중인 인증서와 일치하는 개인 키가 필요합니다.
John Rix

21

설명 에서 제안했듯이 호스트의 인증서 저장소가 게스트와 호환되는 경우 직접 마운트 할 수 있습니다.

Debian 호스트 (및 컨테이너)에서 성공적으로 수행했습니다.

docker run -v /etc/ssl/certs:/etc/ssl/certs:ro ...

그렇다면 빌드 서버에서 Docker 이미지를 빌드 할 때 어떻게해야할까요? : /
Ewoks

@Ewoks 일부 프라이빗 DNS에서 인증서를 호스팅하고 helm 차트에로드 할 수 있으며 클러스터에서 볼륨 생성을 자동화 할 수 있습니다.
Bassam Gamal

0

상대 경로를 사용하여 볼륨을 컨테이너에 마운트 할 수 있습니다.

docker run -v `pwd`/certs:/container/path/to/certs ...

pwd현재 작업 디렉토리를 제공하는 백틱에 유의하십시오 . certs현재 디렉터리 docker run에 실행되는 폴더 가 있다고 가정합니다 . 로컬 개발에 적합하며 프로젝트에서 certs 폴더를 계속 볼 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.