是否有任何优雅的方法可以将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并使容器变得有点奇怪。
答案 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文件夹对您的项目可见。