Docker配置远程连接

前言

默认 Docker 是通过非网络的 Unix 套接字运行的,只能够进行本地通信(/var/run/docker.sock),是不能够直接远程连接 Docker 的。

开始配置

编辑 /etc/docker/daemon.json 文件

{
  "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
}

重启 Docker 服务

sudo systemctl restart docker

检测 Docker 服务

systemctl status docker

解决问题

unable to configure the Docker daemon with file /etc/docker/daemon.json: the following directives are specified both as a flag and in the configuration file: hosts: (from flag: [fd://], from file: [unix:///>

Docker 守护进程的配置冲突:hosts 参数在 /etc/docker/daemon.json 文件中和 systemd 服务的启动参数(flag)中同时被定义,导致 Docker 无法启动。具体的冲突是:

  • daemon.json 配置了 hosts: ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"]
  • systemd 服务启动参数(flag)中指定了 hosts: [fd://]

Docker 不允许 hosts 参数在两个地方同时定义,因此启动失败。

检查 systemd 配置文件

Dockersystemd 配置文件可能通过 ExecStart 参数设置了默认的 fd://(文件描述符通信方式)。查看当前配置:

systemctl cat docker

or

cat /lib/systemd/system/docker.service

查找 ExecStart 行,通常类似:

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

-H fd:// 是默认的 hosts 配置,与 daemon.json 中的配置冲突。

移除 systemd 中的 -H fd://

编辑 systemdDocker 服务配置文件,避免重复定义 hosts

创建或编辑覆盖文件

sudo mkdir -p /etc/systemd/system/docker.service.d
sudo nano /etc/systemd/system/docker.service.d/override.conf

添加以下内容,移除 -H fd://

[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock

注意:ExecStart= 先清空原有配置,然后重新定义。

保存并重新加载 systemd 配置,重启 Docker 并检查状态:

sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status docker
### 远程连接Docker Desktop至Linux服务器 为了实现从Docker Desktop远程连接到Linux服务器,通常涉及配置SSH访问权限以及设置Docker守护程序以接受来自特定客户端的请求。 #### 配置SSH访问 确保本地机器能够通过SSH安全登录目标Linux服务器。这一步骤对于后续操作至关重要[^1]。具体来说,在本地计算机上执行如下命令来测试并建立与远端主机的安全连接: ```bash ssh username@linux_server_ip_address ``` 这里`username`代表拥有适当权限用于管理容器服务的有效用户名;而`linux_server_ip_address`则是指代运行着所需交互之Docker环境的目标设备公网IP地址或域名。 #### 设置Docker守护进程监听外部连接 默认情况下,Docker仅允许来自localhost(即同一台物理机上的应用程序和服务)发起API调用。为了让其他位置的应用也能顺利沟通,则需调整其配置文件使它对外界开放接口。编辑位于 `/etc/docker/daemon.json` 的JSON格式配置文档,加入下列字段指定TCP端口供外界访问: ```json { "hosts": ["unix:///var/run/docker.sock", "tcp://0.0.0.0:2375"] } ``` 上述改动使得Docker不仅继续响应Unix socket形式的传统内部通信方式,同时也开启了面向互联网暴露于2375号端口处的服务入口。值得注意的是,这种做法可能带来安全隐患,因此建议采取额外措施保障安全性,比如利用防火墙规则限定可接入源地址范围或是启用TLS加密传输机制保护数据交换过程中的隐私性[^2]。 完成以上修改之后重启Docker服务生效更改: ```bash sudo systemctl restart docker ``` #### 使用Docker CLI验证连通状况 最后回到最初提到过的Windows/MacOS平台下的图形界面工具——Docker Desktop之前,先借助命令行工具确认一切正常运作无误。打开终端窗口输入下面指令尝试获取远程节点版本信息作为初步检验手段之一: ```bash docker -H tcp://<your-linux-server-ip>:2375 version ``` 如果返回了关于对方系统的描述说明已经成功建立了稳定可靠的链路关系。此时再考虑进一步集成GUI组件也不迟。 #### 整合Docker Desktop进行可视化控制 当所有前期准备工作都顺利完成以后,就可以着手准备让Docker Desktop参与到整个流程当中来了。虽然官方并不直接支持跨操作系统边界直接桥接两套不同体系结构之间的差异,但是可以通过安装适用于各自平台特性的代理插件间接达成目的。例如,在Mac OS X环境下推荐采用HyperKit驱动方案构建轻量级虚拟化层承载Guest OS实例;而在基于Microsoft Windows 10 Pro及以上版本的操作系统里则更倾向于Hyper-V技术路线实施相同功能特性集。 不过最简便的方式还是直接在Docker Desktop中配置远程Docker引擎。进入Preferences -> Docker Engine ,然后添加远程Docker引擎URL,通常是 `tcp://<your-linux-server-ip>:2375` 。保存设置后,即可在Docker Desktop中查看和管理远程Linux服务器上的容器资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值