Skip to main content

Docker远程访问配置指南

概述

Docker Daemon默认只允许本地访问,不支持远程访问。本文详细介绍如何配置Docker的远程访问功能,实现通过本地Docker客户端访问和管理远程主机上的Docker服务。

主要内容

  1. Linux系统配置方法
  2. Windows系统配置方法
  3. 安全配置(TLS)
  4. 注意事项

适用场景

  • 开发环境远程管理
  • CI/CD自动化部署
  • 多主机容器编排

Linux系统配置方法

方法一:使用systemd配置(推荐)

  1. 修改Docker服务配置
# 使用systemctl编辑Docker配置
sudo systemctl edit docker
  1. 在打开的编辑器中添加以下内容(/etc/systemd/system/docker.service.d/override.conf):
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd

说明:第一行ExecStart=用于清除默认参数,必须保留。这样配置后,Docker将使用daemon.json中的设置。

  1. 创建或修改daemon.json文件(/etc/docker/daemon.json):
{
"hosts": [
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2375"
]
}

重要:确保JSON格式正确,否则Docker将无法启动。

  1. 重启Docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker.service
  1. 验证配置:
sudo netstat -ntlp | grep dockerd

方法二:直接修改服务文件

  1. 修改Docker服务文件:
# 编辑服务文件
sudo vim /lib/systemd/system/docker.service

# 注释原有的ExecStart行,添加新配置
# ExecStart=/usr/bin/dockerd -H fd://
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock
  1. 重启Docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker.service

Windows系统配置方法

配置Docker Desktop

  1. 开启远程访问:

    • 打开Docker Desktop设置
    • 勾选"Expose daemon on tcp://localhost:2375 without TLS"
  2. 修改daemon.json配置:

{
"hosts": [
"tcp://0.0.0.0:2375"
]
}
  1. 配置Windows防火墙:
# 以管理员身份运行PowerShell
netsh advfirewall firewall add rule name="docker_daemon" dir=in action=allow protocol=TCP localport=2375
New-NetFirewallRule -DisplayName 'Docker SSL Inbound' -Profile @('Domain', 'Public', 'Private') -Direction Inbound -Action Allow -Protocol TCP -LocalPort 2376
  1. 测试配置:
docker -H 127.0.0.1:2375 info
# 或通过浏览器访问
http://localhost:2375/version

3. 安全配置(TLS)

警告:在生产环境中,必须配置TLS安全连接以保护Docker服务。

安全级别说明

  • 开发环境:可使用非TLS连接(2375端口)
  • 生产环境:必须使用TLS加密连接(2376端口)

配置步骤

  1. 创建CA、服务器和客户端密钥:
# 生成CA密钥和公钥
openssl genrsa -aes256 -out ca-key.pem 4096
openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

# 创建服务器密钥
openssl genrsa -out server-key.pem 4096
openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
  1. 配置IP扩展:
echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
  1. 生成证书:
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf
  1. 创建客户端证书:
openssl genrsa -out key.pem 4096
openssl req -subj '/CN=client' -new -key key.pem -out client.csr
echo extendedKeyUsage = clientAuth > extfile-client.cnf
openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out cert.pem -extfile-client.cnf
  1. 设置证书权限:
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem

启用TLS

  1. 启动Docker守护进程:
dockerd \
--tlsverify \
--tlscacert=ca.pem \
--tlscert=server-cert.pem \
--tlskey=server-key.pem \
-H=0.0.0.0:2376
  1. 客户端连接:
docker --tlsverify \
--tlscacert=ca.pem \
--tlscert=cert.pem \
--tlskey=key.pem \
-H=$HOST:2376 version

默认安全配置

配置默认TLS连接:

mkdir -pv ~/.docker
cp -v {ca,cert,key}.pem ~/.docker
export DOCKER_HOST=tcp://$HOST:2376 DOCKER_TLS_VERIFY=1

4. 注意事项

安全建议

  1. 在生产环境中必须启用TLS安全连接
  2. 安全端口默认为2376,非安全端口为2375
  3. 证书文件应妥善保管,避免泄露

维护建议

  1. 定期更新证书以确保安全性
  2. 配置防火墙时只开放必要的端口
  3. 建议使用强密码和复杂的证书配置

最佳实践

  1. 为不同环境设置不同的访问权限
  2. 定期审计访问日志
  3. 使用VPN或跳板机限制访问来源