Docker 远程访问完整配置教程以及核心参数理解

Docker 远程访问完整配置教程

以下是配置 Docker 支持远程访问的完整教程,包括参数说明、配置修改、云服务器安全组设置、主机防火墙配置,以及验证远程访问的详细步骤。


1. 理解 -H fd:// 参数的作用(理解了以后容易理解后面的操作)

-H 参数用于指定 Docker 守护进程的监听方式(监听"门口")。可以配置 Docker 监听:

  • Unix 套接字 :如 unix:///var/run/docker.sock(本地通信)。
  • TCP 地址 :如 tcp://0.0.0.0:2375(远程访问)。
  • 文件描述符(fd:// :让 Docker 通过 systemd 管理监听方式。
什么是 -H fd://
  • fd:// 表示 File Descriptor(文件描述符)。
  • Docker 不直接监听具体地址或端口,而是通过 systemd 提供的文件描述符监听。
  • systemd 通常默认让 Docker 使用本地 Unix 套接字 unix:///var/run/docker.sock
形象比喻
  • 没有 -H fd://

    Docker 自己决定监听哪些"门",比如监听本地套接字或远程端口。你明确告诉它:

    "去盯住这扇门,比如 2375 端口!"

  • 使用 -H fd://

    Docker 把选择监听方式的任务交给 systemd。Docker 对 systemd 说:

    "systemd,你安排门,我负责听谁敲门!"


2. 修改 Docker 配置

2.1 修改 docker.service 文件
  1. 编辑 Docker 服务文件:

    bash
    
    
     
    sudo nano /usr/lib/systemd/system/docker.service
    
  2. 查找以下行:

    bash
    
    
     
    ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock
    
  3. 修改为:

    bash
    
    
     
    ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock
    

    这里移除了 -H fd:// 参数,让 Docker 不再依赖 systemd 的监听方式。

  4. 保存并退出。


2.2 配置 daemon.json 文件

通过 /etc/docker/daemon.json 配置 Docker 监听本地和远程连接。

  1. 编辑 daemon.json 文件:

    bash
    
    
     
    sudo nano /etc/docker/daemon.json
    
  2. 添加以下内容:(registry 是docker加速器,在国外可以不管这个)

    json
    
    
     
    {
      "registry-mirrors": [
        "https://docker.1ms.run",
        "https://docker.unsee.tech"
      ],
      "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
    }
    
  3. 保存并退出。


2.3 重新加载并重启 Docker 服务
bash


 
sudo systemctl daemon-reload
sudo systemctl restart docker

3. 配置云服务器安全组

对于云服务器(如阿里云、AWS、腾讯云),需要在安全组中开放 Docker 的远程访问端口(TCP 2375)。

  1. 登录云服务提供商管理控制台。
  2. 找到实例的 安全组 配置。
  3. 添加一条规则:
    • 协议:TCP
    • 端口范围:2375
    • 来源 :根据需求设置(可选 0.0.0.0/0 或特定 IP 段)。
  4. 保存并应用规则。

4. 配置主机防火墙

如果服务器启用了防火墙(如 firewalld),需要显式开放 TCP 2375 端口。

4.1 检查防火墙状态
bash


 
sudo systemctl status firewalld

如果防火墙未启用,可跳过本节。

4.2 开放 2375 端口
bash


 
sudo firewall-cmd --zone=public --add-port=2375/tcp --permanent
4.3 重新加载防火墙
bash


 
sudo firewall-cmd --reload
4.4 验证防火墙规则
bash


 
sudo firewall-cmd --list-ports

确认 2375/tcp 端口已在列表中。


5. 验证远程访问

5.1 使用浏览器验证

在浏览器地址栏输入以下 URL:

http://<服务器IP>:2375/version

如果配置正确,会返回类似以下的 JSON 数据:

粘个图,嘿嘿

5.2 使用 Docker CLI 验证

在远程客户端执行以下命令:

bash


 
docker -H tcp://<服务器IP>:2375 info

如果配置正确,将返回 Docker 服务器的相关信息。


6. 安全性注意事项(没试过可选)

  1. 默认配置无加密或认证

    • Docker 的远程访问(TCP 2375)默认不启用加密或认证机制,存在安全隐患。
    • 开放 2375 后,任何访问到该端口的用户都能完全控制 Docker 守护进程。
  2. 推荐的安全措施

    • 使用 SSH 隧道:不直接开放 2375,而是通过 SSH 隧道访问 Docker:

      bash
      
      
       
      ssh -L 2375:localhost:2375 user@<服务器IP>
      

      然后本地访问:

      bash
      
      
       
      docker -H tcp://localhost:2375 info
      
    • 启用 TLS 加密: 为 Docker 配置 TLS,确保通信加密且客户端必须认证。具体配置可以参考 Docker 官方文档。

    • 限制来源 IP:通过安全组或防火墙仅允许可信 IP 访问 2375。


总结

通过本教程,完成 Docker 的远程访问配置,包括参数调整、安全组与防火墙配置,以及远程访问的验证。

相关推荐
boy快快长大7 小时前
通过Dockerfile来实现项目可以指定读取不同环境的yml包
docker
会飞的土拨鼠呀7 小时前
docker system df命令
运维·docker·容器
dessler9 小时前
Docker-原理之cgroup
linux·运维·docker
Dolphin_Home10 小时前
Docker搭建Skywalking
docker·容器·skywalking
码上飞扬11 小时前
深入探讨服务器虚拟化:架构、技术与应用
服务器·docker·k8s·虚拟化·kvm·xen
ZhangTao_zata13 小时前
rustdesk自己搭建配置
docker
大小科圣13 小时前
docker搭建gitlab和jenkins
docker·gitlab·jenkins
我是鸹貔13 小时前
微服务-Eureka
微服务·eureka·架构
玄明Hanko14 小时前
2024 年 docker 提示index.docker.io
docker·镜像
州周15 小时前
Flink operator实现自动扩缩容
docker·flink·kubernetes