【问题标题】:How to set TLS Certificates for a machine in docker-machine如何在 docker-machine 中为机器设置 TLS 证书
【发布时间】:2017-09-21 07:34:51
【问题描述】:

我想做的事:

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

我做了什么:

我使用以下命令启动 dockerd:

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

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

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 错误。

$ 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

【问题讨论】:

  • 尝试将 dockerhost 移动到命令的末尾而不是开始

标签: docker docker-machine docker-swarm


【解决方案1】:

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

我找到了对我测试过的解决方法here 的引用,它似乎确实有效。以下是我遵循的步骤:

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

这将创建以下目录:

~/.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 remotedockereval "$(docker-machine env remotedocker)" 并成功使用您的远程守护程序。

【讨论】:

    猜你喜欢
    • 2022-07-15
    • 2016-06-20
    • 1970-01-01
    • 2020-05-31
    • 2017-12-12
    • 1970-01-01
    • 2018-07-25
    • 2017-12-11
    • 1970-01-01
    相关资源
    最近更新 更多