解决 macOS “com.docker.socket 包含恶意软件”问题(含官方脚本整理)

3 阅读2分钟

背景

近期,许多 macOS 用户在启动 Docker Desktop 时,遇到如下报错:

未打开“com.docker.socket”,因其包含恶意软件。此操作未对Mac造成危害。

这通常是由于 macOS 的安全机制(如 Gatekeeper 或 XProtect)误判 Docker 的某些辅助程序为恶意软件,导致相关服务无法正常启动,进而影响 Docker Desktop 的使用。


问题原因

根据 GitHub 官方 issue #7527 及社区反馈,主要原因有:

  • Docker Desktop 某些版本的辅助程序(如 com.docker.socketcom.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. 使用方法

  1. 保存脚本
    将上述内容保存为 fix_docker.sh

  2. 赋予执行权限

    chmod +x fix_docker.sh
    
  3. 执行脚本

    sudo ./fix_docker.sh
    
  4. 重启 Docker Desktop
    脚本执行完毕后,重新启动 Docker Desktop。


注意事项

  • 确保 Docker.app 为官网下载的官方版本,不要使用第三方或破解版本。
  • 脚本操作涉及系统目录,建议操作前备份相关文件。
  • 如果问题依然存在,建议卸载 Docker Desktop 并安装最新版本。
  • Homebrew 用户可直接升级:
    brew update && brew upgrade --cask docker
    

参考资料