docker容器SSL证书


87

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

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

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

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

我现在也想知道,/etc/ssl/certs从主机副本安装到容器上是否会更优雅?这样做将隐式允许容器信任与主机相同的事物。

我正在使用一个烦人的代理程序,该代理程序会放弃所有的:(。这会破坏SSL并使容器有点奇怪。


3
您是否考虑过创建将使用您的映像的Dockerfile,添加文件并运行update-ca-certificates?还是那不是您要找的东西?
席琳Aussourd

我已经做了一些图像。这不是一个糟糕的解决方案。确实需要您自己构建所有图像。
Beau Trepp 2014年

Answers:


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'9

4
尽管这是一个很好的观点,但是上述解决方案并未公开任何内容。这是为了将自己的证书添加到本地构建的映像中,然后私下使用。然后,您可以将生成的图像推送到公共存储库,但这就像您所说的那样是个坏主意。
shudgston

9
从什么时候开始证书是秘密的?
techraf

3
由于您的服务器需要一个私钥来匹配它正在发布的证书。
约翰·里克斯

21

上面注释中所建议,如果主机上的证书存储与来宾兼容,则可以直接挂载它。

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

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

那么在构建服务器上构建Docker映像时该怎么办?:/
Ewoks

@Ewoks您可以将证书托管在某个专用DNS上,并将其加载到掌舵表中,并且可以在群集上自动创建卷。
巴萨姆·贾马尔

0

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

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

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.