Docker-machine无法连接DigitalOcean服务器问题求助
解决Docker-Machine连接DigitalOcean服务器的TLS超时问题
我之前在DigitalOcean上部署Docker化的Rails应用时,也碰到过完全一样的TLS连接超时问题,regenerate-certs之后还是没用,折腾了好一阵才解决,给你几个亲测有效的排查步骤:
1. 先排查网络端口是否通畅
这是最常见的原因:
- 登录DigitalOcean控制面板,找到你的Droplet,检查防火墙规则:必须开放TCP端口2376(Docker-Machine的TLS通信端口)。建议先把来源设为你本地机器的公网IP(更安全),如果暂时不确定,也可以先允许所有IP测试,确认问题后再改回来。
- 本地测试端口连通性:打开终端执行
nc -zv 207.322.414.35 2376(把IP换成你的Droplet公网IP)。如果输出显示“Connection refused”或者超时,说明网络端口没打通,先解决这个再往下走。
2. 重置Docker-Machine并重新加载环境变量
有时候Docker-Machine的状态缓存会出问题:
- 先重启远程的Docker-Machine:
docker-machine restart my-server - 然后删除本地旧的证书缓存(路径在
~/.docker/machine/machines/my-server/):rm -rf ~/.docker/machine/machines/my-server/*.pem - 重新生成证书:
执行这个命令时,会提示你确认重启Docker daemon,输入docker-machine regenerate-certs my-servery即可。 - 最后重新加载环境变量,建议不要直接用
eval,先手动导出试试(替换成你的本地证书路径):
然后执行export DOCKER_TLS_VERIFY="1" export DOCKER_HOST="tcp://207.322.414.35:2376" export DOCKER_CERT_PATH="/Users/你的用户名/.docker/machine/machines/my-server" export DOCKER_MACHINE_NAME="my-server"docker info,如果能返回Docker服务器的信息,说明连接正常了。
3. 检查远程Docker Daemon的配置
如果网络没问题,可能是Droplet上的Docker daemon配置有误:
- 通过SSH登录到Droplet:
docker-machine ssh my-server - 查看Docker服务状态:
确保服务是systemctl status dockeractive (running)状态。 - 检查Docker daemon的启动参数,确认包含TLS相关配置:
应该能看到类似ps aux | grep docker--tlsverify --tlscacert=/var/lib/docker/ca.pem --tlscert=/var/lib/docker/server.pem --tlskey=/var/lib/docker/server-key.pem -H tcp://0.0.0.0:2376的参数。如果没有,需要修改Docker的配置文件:- 编辑
/etc/docker/daemon.json(如果没有就新建),添加以下内容:{ "tls": true, "tlscacert": "/var/lib/docker/ca.pem", "tlscert": "/var/lib/docker/server.pem", "tlskey": "/var/lib/docker/server-key.pem", "hosts": ["tcp://0.0.0.0:2376", "unix:///var/run/docker.sock"] } - 重启Docker服务:
systemctl restart docker
- 编辑
4. 终极方案:重新创建Docker-Machine
如果以上方法都没用,可能是初始创建Machine时留下了隐藏的配置问题,那就干脆重新来:
- 删除旧的Machine:
docker-machine rm my-server - 用DigitalOcean驱动重新创建(替换成你的DO访问令牌):
创建完成后,再执行docker-machine create --driver digitalocean --digitalocean-access-token=你的DO_API令牌 my-servereval $(docker-machine env my-server),应该就能正常连接了。
内容的提问来源于stack exchange,提问作者Rails Developer
相关产品推荐
相关产品推荐

