docker container ssl证书

时间:2014-09-25 01:15:48

标签: ssl ssl-certificate docker

是否有任何优雅的方法可以将ssl证书添加到来自docker pull的图像中?

我正在寻找一种简单且可重现的方法,将文件添加到/ etc / ssl / certs并运行update-ca-certificates。 (这应该涵盖ubuntu和debian图像)。

我在CoreOS上使用docker,而coreos机器信任所需的ssl证书,但Docker容器显然只有默认值。

我已尝试使用docker run --entrypoint=/bin/bash然后添加证书并运行update-ca-certificates,但这似乎永久覆盖了入口点。

我现在也想知道,从主机复制到容器上挂载/etc/ssl/certs会更优雅吗?这样做会隐含地允许容器信任与主机相同的东西。

我正在使用令人讨厌的代理来解决所有问题:(。这会破坏SSL并使容器变得有点奇怪。

4 个答案:

答案 0 :(得分:53)

使用-v将证书挂载到Docker 容器

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

答案 1 :(得分:16)

我正在尝试做类似的事情。如上所述,我认为您希望使用自定义Dockerfile构建新图像(使用您作为基本图像提取的图像),ADD您的证书,然后RUN update-ca-certificates。这样,每次从这个新图像启动容器时,您都将具有一致的状态。

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

让我们说这个Dockerfile的docker build产生了IMAGE_ID。在下一个docker run -d [any other options] IMAGE_ID,由该命令启动的容器将具有您的证书信息。简单,可重复。

答案 2 :(得分:15)

正如comment above中所建议的那样,如果主机上的证书存储与guest虚拟机兼容,则可以直接挂载它。

在Debian主机(和容器)上,我已成功完成:

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

答案 3 :(得分:1)

您可以使用相对路径将卷安装到容器:

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

请注意pwd上的反勾,这会为您提供当前的工作目录。假定您在执行certs的当前目录中有docker run文件夹。 Kinda非常适合本地开发,并且可以使certs文件夹对您的项目可见。