考虑这个场景:
docker-machine create -d amazonec2 --swarm --swarm-master
(等)docker-machine env
用于新 IP 会抱怨 tls cert IP 不匹配docker-machine regenerate-certs
使 docker 再次使用 docker-machine envdocker-machine env --swarm
会表现得很好,但是任何 docker 或 docker-compose 命令都不会执行任何操作。 cli 中没有错误,只是什么都没有。 不使用 --swarm IP 时的 docker 图像将生成正确的图像列表,但使用 --swarm IP 它只会列出标题而没有图像。regenerate-certs
应该与现有的群体一起工作吗?
当您运行 swarm 时,它会在首次初始化时侦听公共 IP。 docker inspect
swarm manage
进程中的docker inspect
看起来像这样。
{
"Path": "/swarm",
"Args": [
"manage",
"--tlsverify",
"--tlscacert=/etc/docker/ca.pem",
"--tlscert=/etc/docker/server.pem",
"--tlskey=/etc/docker/server-key.pem",
"-H",
"tcp://0.0.0.0:3376",
"--strategy",
"spread",
"--advertise",
"PUBLICIP:2376",
"--replication",
"etcd://ectd.host:2379/swarm"
]
}
我发现的快速(而且有点懒惰)的解决方法只是重新运行 docker-machine 命令,但使用通用驱动程序来设置 swarm。
docker-machine --debug create NEWNAME -d generic \
--generic-ip-address SERVERIP \
--generic-ssh-key KEYPATH \
--generic-ssh-user core \
--engine-label public=false \
--swarm \
--swarm-master \
--swarm-opt replication \
--swarm-discovery=etcd:/URL:PORT/swarm \
--engine-opt "cluster-store=etcd://URL:PORT/store" \
--engine-opt "cluster-advertise=eth0:2376"
感谢@dustinblackman 的提示。 这个解决方法对我帮助很大!
重新生成 swarm master 后,是否有可能删除其中一台机器?
当同一个服务器以不同的名称列出两次时,它看起来有点混乱。
@rm-jamotion 不使用docker-machine rm
? 您可以删除~/.docker/machine/machines
的机器文件夹。
@dustinblackman是的,我知道,但我必须使用 aws 驱动程序删除第一台机器。 但是如果可以删除使用通用驱动程序创建的机器并将密钥移动到aws机器会更好。 因此 aws 的启动/停止功能将保持可用...
docker-machine 版本 0.7.0,构建 783b3a8,
这不仅是 IP 地址的问题。即使在 Virtualbox 驱动程序中没有更改 IP 地址,我也注意到 regenerate-certs 会生成错误的密钥用法:
sudo openssl x509 -in /var/lib/boot2docker/server.pem -noout -text | grep -A8 "X509v3 extensions"
X509v3 extensions:
X509v3 Key Usage: critical
Digital Signature, Key Encipherment, Key Agreement
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Subject Alternative Name:
DNS:localhost, IP Address:10.10.0.148
在 docker daemon 的日志中,您可以找到:
2016-07-29 13:13:58.745094 I | http: TLS handshake error from 10.10.0.60:33214: tls: failed to verify client's certificate: x509: certificate specifies an incompatible key usage
在连接到 swarm 时的 docker info 中,所有节点都处于 Pending 状态,并且在 swarm master 日志中:
time="2016-07-29T13:22:58Z" level=debug msg="Failed to validate pending node: The server probably has client authentication (--tlsverify) enabled. Please check your TLS client certification settings: Get https://10.10.0.60:2376/info: remote error: bad certificate" Addr="10.10.0.60:2376"