Docker远程访问配置指南
概述
Docker Daemon默认只允许本地访问,不支持远程访问。本文详细介绍如何配置Docker的远程访问功能,实现通过本地Docker客户端访问和管理远程主机上的Docker服务。
主要内容
- Linux系统配置方法
- Windows系统配置方法
- 安全配置(TLS)
- 注意事项
适用场景
- 开发环境远程管理
- CI/CD自动化部署
- 多主机容器编排
Linux系统配置方法
方法一:使用systemd配置(推荐)
- 修改Docker服务配置
# 使用systemctl编辑Docker配置
sudo systemctl edit docker
- 在打开的编辑器中添加以下内容(
/etc/systemd/system/docker.service.d/override.conf
):
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd
说明:第一行
ExecStart=
用于清除默认参数,必须保留。这样配置后,Docker将使用daemon.json中的设置。
- 创建或修改daemon.json文件(
/etc/docker/daemon.json
):
{
"hosts": [
"unix:///var/run/docker.sock",
"tcp://0.0.0.0:2375"
]
}
重要:确保JSON格式正确,否则Docker将无法启动。
- 重启Docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker.service
- 验证配置:
sudo netstat -ntlp | grep dockerd
方法二:直接修改服务文件
- 修改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
- 重启Docker服务:
sudo systemctl daemon-reload
sudo systemctl restart docker.service
Windows系统配置方法
配置Docker Desktop
开启远程访问:
- 打开Docker Desktop设置
- 勾选"Expose daemon on tcp://localhost:2375 without TLS"
修改daemon.json配置:
{
"hosts": [
"tcp://0.0.0.0:2375"
]
}
- 配置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
- 测试配置:
docker -H 127.0.0.1:2375 info
# 或通过浏览器访问
http://localhost:2375/version
3. 安全配置(TLS)
警告:在生产环境中,必须配置TLS安全连接以保护Docker服务。
安全级别说明
- 开发环境:可使用非TLS连接(2375端口)
- 生产环境:必须使用TLS加密连接(2376端口)
配置步骤
- 创建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
- 配置IP扩展:
echo subjectAltName = DNS:$HOST,IP:10.10.10.20,IP:127.0.0.1 >> extfile.cnf
echo extendedKeyUsage = serverAuth >> extfile.cnf
- 生成证书:
openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \
-CAcreateserial -out server-cert.pem -extfile extfile.cnf
- 创建客户端证书:
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
- 设置证书权限:
chmod -v 0400 ca-key.pem key.pem server-key.pem
chmod -v 0444 ca.pem server-cert.pem cert.pem
启用TLS
- 启动Docker守护进程:
dockerd \
--tlsverify \
--tlscacert=ca.pem \
--tlscert=server-cert.pem \
--tlskey=server-key.pem \
-H=0.0.0.0:2376
- 客户端连接:
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. 注意事项
安全建议
- 在生产环境中必须启用TLS安全连接
- 安全端口默认为2376,非安全端口为2375
- 证书文件应妥善保管,避免泄露
维护建议
- 定期更新证书以确保安全性
- 配置防火墙时只开放必要的端口
- 建议使用强密码和复杂的证书配置
最佳实践
- 为不同环境设置不同的访问权限
- 定期审计访问日志
- 使用VPN或跳板机限制访问来源