Docker中的TLS失败

我对TLSauthentication的知识非常有限。 我想为Docker守护进程启用https。 我跟着这个教程,但最终没有启动docker守护进程。

我在Ubuntu 16.04 VM中使用docker,我的客户端和服务器是同一台机器。 所以我在整个过程中使用$hostname作为“ Common Name ”。

在运行之后,在Docker文档中完成整个过程

 sudo dockerd --tlsverify --tlscacert=ca.pem --tlscert=server-cert.pem --tlskey=server-key.pem -H=0.0.0.0:2376 

我得到的信息日志,“ API listen on [::]:2376

当我使用下面的命令:

 docker --tlsverify --tlscacert=ca.pem --tlscert=cert.pem --tlskey=key.pem -H=$HOST:2376 version 

我得到适当的回应。

但是,当我重新加载守护进程,并尝试启动泊坞窗说,未能启动docker,并给出以下消息 –

 Job for docker.service failed because the control process exited with error code. See "systemctl status docker.service" and "journalctl -xe" for details. 

'journalctl -xe'的输出是:
在这里输入图像说明

我将必要的证书复制到~/.docker/ ,而我的/lib/systemd/system/docker.service文件中的' ExecStart '是:

 ExecStart=/usr/bin/dockerd -H fd:// -H 0.0.0.0:2376 \ --tlsverify --tlscacert=/home/sakib/.docker/ca.pem \ --tlskey=/home/sakib/.docker/key.pem \ --tlscert=/home/sakib/.docker/cert.pem 

当我尝试与API通信时,我得到以下回应:

 $ curl -X GET https://0.0.0.0:2376/images/json curl: (35) gnutls_handshake() failed: Certificate is bad $ docker version Client: Version: 1.12.1 API version: 1.24 Go version: go1.6.3 Git commit: 23cf638 Built: Thu Aug 18 05:33:38 2016 OS/Arch: linux/amd64 An error occurred trying to connect: Get https://EL802:2376/v1.24/version: x509: certificate is valid for $HOST, not EL802 

注意:EL802是我设置为“HOST”环境variables的主机名。

我认为问题是在创build客户端证书时select的“CN”名称。 我如下创build服务器和客户端证书 –

服务器:

 openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr 

客户:

 openssl req -subj '/CN=$HOST' -new -key key.pem -out client.csr 

由于我的客户端和服务器是我设置为$HOSTvariables的主机(EL802)。

您的图片不显示完整的错误行,但如果错误消息是:

  pid file found, ensure docker is not running or delete /var/run/docker.pid 

尝试并删除该pid,然后重新启动。
另外请仔细检查你在Ubuntu上的Docker安装及其systemdconfiguration 。

x509:证书适用于$ HOST,而不是EL802

这意味着证书已经使用string$ HOST创build,而不是实际的值。

 openssl req -subj '/CN=$HOST' 

单引号的强烈的引用将阻止shell用它的值replace$HOST 。 使用双引号。