我想做的事情:
我在一台机器上运行 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:由未知颁发机构签名的证书
错误。
$ 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配置
,但这不起作用:
$ 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 驱动程序将配置为使用在 ~/.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.pem
、cert.pem
和 key.pem
文件。据我所知, config.json
中引用的其他文件可能不会被 none
驱动程序使用,因为 regenerate-certs
是没有由none
实现。
您需要复制 ca.pem 和 key.pem 文件
此时,您应该能够运行 docker-machine config remotedocker
或 eval "$(docker-machine env remotedocker)"
并使用您的远程守护进程成功。
关于docker - 如何在 docker-machine 中为机器设置 TLS 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46338037/