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

Bil*_*qar 2 docker docker-swarm docker-machine

我想做的事:

我已经在TLS验证设置为true的一台机器上运行dockerd。我想将此主机添加为计算机docker-machine

我做了什么:

我使用以下命令启动dockerd:

$ sudo dockerd -D --tls=true --tlscert=cert.pem --tlskey=key.pem -H tcp://172.19.48.247:2376
Run Code Online (Sandbox Code Playgroud)

在第二台计算机上,我获取了以下变量:

export DOCKER_HOST=tcp://172.19.48.247:2376                                                                                 
export DOCKER_TLS_VERIFY=1
export DOCKER_CERT_PATH=/path/to/ssl
Run Code Online (Sandbox Code Playgroud)

并成功运行docker命令:

$ docker run busybox echo hello
hello
Run Code Online (Sandbox Code Playgroud)

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

docker-machine create --driver none --url=tcp://172.19.48.247:2376 dockerhost
Run Code Online (Sandbox Code Playgroud)

我要去哪里了:

我现在x509: 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
Run Code Online (Sandbox Code Playgroud)

我尝试使用,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
Run Code Online (Sandbox Code Playgroud)

pro*_*erq 5

默认情况下,无驱动程序将配置为使用位于的TLS证书~/.docker/machine。这不一定是必需的,因为如果远程Docker主机具有的证书不是在该位置获得的ca.pem签名的,则将遇到错误。

我发现一个解决办法的引用在这里我测试,它肯定似乎工作。这是我遵循的步骤:

docker-machine create -d none --url tcp://remotedocker.example.com:2376 remotedocker
Run Code Online (Sandbox Code Playgroud)

这将创建以下目录:

~/.docker/machine/machines/remotedocker
Run Code Online (Sandbox Code Playgroud)

该目录中有一个名为的文件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)"成功使用远程守护程序。