背景
近期,许多 macOS 用户在启动 Docker Desktop 时,遇到如下报错:
未打开“com.docker.socket”,因其包含恶意软件。此操作未对Mac造成危害。
这通常是由于 macOS 的安全机制(如 Gatekeeper 或 XProtect)误判 Docker 的某些辅助程序为恶意软件,导致相关服务无法正常启动,进而影响 Docker Desktop 的使用。
问题原因
根据 GitHub 官方 issue #7527 及社区反馈,主要原因有:
- Docker Desktop 某些版本的辅助程序(如
com.docker.socket
、com.docker.vmnetd
)签名不正确或被系统误判。 - macOS 安全策略升级后,对第三方二进制文件的校验更加严格。
- 误报并不代表 Docker Desktop 真有恶意行为,官方已确认属于误报。
官方说明
Docker 官方在 issue #7527 中明确表示:
- 该报错为误报,Docker Desktop 并未感染恶意软件。
- 主要是由于部分安装文件签名不正确。
- 官方已发布补丁版本(4.32~4.37 及以上)修复该问题,建议用户升级。
临时修复方案:fix_docker.sh 脚本
如果暂时无法升级 Docker Desktop,可以使用官方推荐的修复脚本,步骤如下:
1. 脚本内容
将以下内容保存为 fix_docker.sh
:
#!/bin/bash
# 停止 Docker 服务
echo "Stopping Docker..."
sudo pkill '[dD]ocker'
# 停止 vmnetd 服务
echo "Stopping com.docker.vmnetd service..."
sudo launchctl bootout system /Library/LaunchDaemons/com.docker.vmnetd.plist
# 停止 socket 服务
echo "Stopping com.docker.socket service..."
sudo launchctl bootout system /Library/LaunchDaemons/com.docker.socket.plist
# 删除旧的 vmnetd 可执行文件
echo "Removing com.docker.vmnetd binary..."
sudo rm -f /Library/PrivilegedHelperTools/com.docker.vmnetd
# 删除旧的 socket 可执行文件
echo "Removing com.docker.socket binary..."
sudo rm -f /Library/PrivilegedHelperTools/com.docker.socket
# 复制新文件
echo "Install new binaries..."
sudo cp /Applications/Docker.app/Contents/Library/LaunchServices/com.docker.vmnetd /Library/PrivilegedHelperTools/
sudo cp /Applications/Docker.app/Contents/MacOS/com.docker.socket /Library/PrivilegedHelperTools/
2. 使用方法
-
保存脚本
将上述内容保存为fix_docker.sh
。 -
赋予执行权限
chmod +x fix_docker.sh
-
执行脚本
sudo ./fix_docker.sh
-
重启 Docker Desktop
脚本执行完毕后,重新启动 Docker Desktop。
注意事项
- 确保 Docker.app 为官网下载的官方版本,不要使用第三方或破解版本。
- 脚本操作涉及系统目录,建议操作前备份相关文件。
- 如果问题依然存在,建议卸载 Docker Desktop 并安装最新版本。
- Homebrew 用户可直接升级:
brew update && brew upgrade --cask docker