如何在docker机器中为机器设置TLS证书

我想做的事:

我有dockerd在TLSvalidation设置为true的一台机器上运行。 我想添加这个主机作为一台机器在docker-machine

我做了什么:

我用下面的命令启动dockerd:

 $ sudo dockerd -D --tls=true --tlscert=cert.pem --tlskey=key.pem -H tcp://172.19.48.247:2376 

在第二台机器上,我得到了以下variables:

 export DOCKER_HOST=tcp://172.19.48.247:2376 export DOCKER_TLS_VERIFY=1 export DOCKER_CERT_PATH=/path/to/ssl 

并成功运行docker命令:

 $ docker run busybox echo hello hello 

然后我添加了这个主机docker-machine:

 docker-machine create --driver none --url=tcp://172.19.48.247:2376 dockerhost 

我哪里去错了:

我正在获取x509: certificate signed by unknown authority错误x509: certificate signed by unknown authorityx509: certificate signed by unknown authority

 $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS Unknown dockerhost - none Running tcp://172.19.48.247:2376 Unknown Unable to query docker version: Get https://172.19.48.247:2376/v1.15/version: x509: certificate signed by unknown authority 

我尝试使用docker-machine config但是不起作用:

 $ docker-machine config dockerhost --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H tcp://172.19.48.247:2376 Incorrect Usage. Usage: docker-machine config [OPTIONS] [arg...] Print the connection config for machine Description: Argument is a machine name. Options: --swarm Display the Swarm config instead of the Docker daemon flag provided but not defined: -tlsverify 

默认情况下,none驱动程序将被configuration为使用在~/.docker/machinefind的TLS证书。 这不一定是需要的,因为如果您的远程Docker主机拥有由您在该位置获得的ca.pem以外的其他名称签名的证书,则会遇到您遇到的错误。

我在这里find了一个解决方法的参考,我testing,它绝对似乎工作。 以下是我遵循的步骤:

 docker-machine create -d none --url tcp://remotedocker.example.com:2376 remotedocker 

这将创build以下目录:

 ~/.docker/machine/machines/remotedocker 

该目录内有一个名为config.json的文件。 编辑该文件,并将“.docker / machine / certs”的每个实例更改为“.docker / machine / machines / remotedocker”

通常,当你远程访问Docker时,只需要访问ca.pemcert.pemkey.pem文件。 据我所知,在config.json引用的其他文件可能不会被none驱动程序使用,因为regenerate-certs不是由none实现的。

您需要复制ca.pem和key.pem文件

此时,您应该能够运行docker-machine config remotedocker ,或者eval "$(docker-machine env remotedocker)"并成功使用远程守护进程。