You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无HTTPS仅HTTP远程Docker主机及SSH创建docker-machine问题求助

我来帮你一步步解决这两个问题,先搞定无安全设置的远程Docker控制,再排查docker-machine的SSH创建故障。


一、无需安全设置远程控制Docker主机(dockervm)

虽然这种无认证的远程访问绝对不适合生产环境,但按照你的需求,我们可以这么配置:

  1. 修改Docker Daemon的监听配置
    Ubuntu 16.04的Docker配置分两种情况,选其中一种即可:

    • 若用Upstart(旧版服务管理):编辑/etc/default/docker文件
      sudo nano /etc/default/docker
      
      找到DOCKER_OPTS行,修改为:
      DOCKER_OPTS="-H tcp://0.0.0.0:2373 -H unix:///var/run/docker.sock"
      
      这里-H tcp://0.0.0.0:2373让Docker监听所有网卡的2373端口,-H unix://...保留本地socket连接。
    • 若用Systemd(新版服务管理):创建/编辑/etc/docker/daemon.json
      sudo nano /etc/docker/daemon.json
      
      写入以下内容:
      {
        "hosts": ["tcp://0.0.0.0:2373", "unix:///var/run/docker.sock"]
      }
      
  2. 重启Docker服务生效

    • Upstart环境:
      sudo service docker restart
      
    • Systemd环境:
      sudo systemctl restart docker
      

    验证监听状态:

    sudo netstat -tulpn | grep docker
    

    你应该能看到0.0.0.0:2373的监听记录。

  3. 确保VirtualBox网络连通
    Windows机器必须能访问到dockervm的2373端口:

    • 最简单的方式是把虚拟机网络改成桥接模式,这样dockervm会和Windows在同一个局域网,用ip addr查看dockervm的IP,Windows用ping <dockervm-ip>测试连通性。
    • 若用NAT模式,需设置端口转发:VirtualBox虚拟机设置→网络→高级→端口转发,添加规则:主机端口2373,子系统端口2373,协议TCP。此时Windows要访问tcp://localhost:2373,或者在Windows的hosts文件里把dockervm映射到localhost。
  4. Windows端配置与测试
    在命令提示符里临时设置环境变量(仅当前窗口有效):

    set DOCKER_HOST=tcp://dockervm:2373
    

    这里的dockervm要能被Windows解析,要么靠hosts映射,要么直接用虚拟机IP(比如set DOCKER_HOST=tcp://192.168.1.100:2373)。
    然后执行docker ps测试,如果失败,先通过telnet dockervm 2373检查端口连通性,排查网络问题。


二、排查docker-machine通过SSH创建故障

docker-machine的SSH创建失败大多和连通性、权限、参数有关,按以下步骤排查:

  1. 先验证基础SSH连通性

    • 确保dockervm的SSH服务已开启:
      sudo service ssh start
      sudo systemctl enable ssh  # 设置开机自启
      
    • 在Windows上测试SSH连接:如果你装了Git Bash或Windows自带的OpenSSH(设置→可选功能安装),打开终端执行:
      ssh <你的dockervm用户名>@dockervm-ip
      
      比如ssh ubuntu@192.168.1.100,如果能成功登录,说明基础连通性没问题;若失败,先解决防火墙、端口22开放、用户名密码/密钥等问题。
  2. 使用正确的docker-machine创建命令
    不要依赖主机名解析,直接用IP,同时指定必要参数:

    docker-machine create --driver generic ^
    --generic-ip-address <dockervm的实际IP> ^
    --generic-ssh-user <你的dockervm用户名> ^
    --generic-ssh-key <你的SSH私钥路径(如果用密钥登录)> ^
    dockervm-machine
    

    如果用密码登录,去掉--generic-ssh-key参数,命令执行时会提示你输入密码。

  3. 配置免密码sudo权限
    docker-machine需要在dockervm里执行sudo命令而无需输入密码,否则会失败:
    在dockervm里执行:

    sudo visudo
    

    添加一行(替换<你的用户名>):

    <你的用户名> ALL=(ALL) NOPASSWD: ALL
    

    保存退出后,测试sudo docker ps是否无需密码即可执行。

  4. 查看debug日志定位问题
    如果还是失败,开启debug模式查看详细错误:

    docker-machine create --debug --driver generic ^
    --generic-ip-address <dockervm的实际IP> ^
    --generic-ssh-user <你的dockervm用户名> ^
    dockervm-machine
    

    日志会显示SSH连接过程、执行的命令,根据错误信息针对性解决(比如密钥权限错误、网络超时、Docker安装失败等)。

  5. 解决Windows SSH客户端问题
    若用原生cmd执行命令,可能缺少SSH客户端,建议用Git Bash或安装OpenSSH客户端后,在PowerShell/Git Bash里执行docker-machine命令,避免cmd的环境限制。


内容的提问来源于stack exchange,提问作者Beto Neto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 10:36:00