使用sickcodes/docker-osx:naked无头启动自定义OS X镜像报错求助
问题:使用sickcodes/docker-osx:naked无头启动自定义Mojave镜像时提示找不到Xvfb
尝试通过以下命令以无头(HEADLESS)模式启动自定义Mojave镜像并进入OS X shell:
# run your own image headless + SSH docker run -it \ --device /dev/kvm \ -p 50922:10022 \ -v "${PWD}/mac_hdd_ng.img:/image" \ sickcodes/docker-osx:naked
运行后报错:
nohup: appending output to 'nohup.out' nohup: failed to run command 'Xvfb': No such file or directory
复现细节
- 使用的
sickcodes/docker-osx:naked镜像哈希:sha256-ffff65c24b7a1588dd665f07f52a48ef5efb9941c2e2fa07573e66524029ab08 - 自定义镜像
mac_hdd_ng.img通过以下命令生成:
docker run -it \ --device /dev/kvm \ -p 50922:10022 \ -v /tmp/.X11-unix:/tmp/.X11-unix \ -e "DISPLAY=${DISPLAY:-:0.0}" \ sickcodes/docker-osx:mojave sudo find /var/lib/docker -size +10G | grep mac_hdd_ng.img
解决方案
原因分析
sickcodes/docker-osx:naked是极简镜像,仅包含运行OS X所需的最核心依赖,未预装Xvfb(虚拟显示服务),而无头模式启动时需要Xvfb模拟显示环境,因此触发找不到命令的错误。
方法1:换用预装Xvfb的镜像
直接使用sickcodes/docker-osx:base或对应系统版本的镜像(如sickcodes/docker-osx:mojave),这些镜像已预装Xvfb及其他必要组件,无需额外配置:
docker run -it \ --device /dev/kvm \ -p 50922:10022 \ -v "${PWD}/mac_hdd_ng.img:/image" \ -e "DISPLAY=:1" \ sickcodes/docker-osx:mojave
方法2:自定义naked镜像,安装Xvfb
如果必须使用naked镜像,可通过Dockerfile构建自定义镜像,预先安装Xvfb:
- 创建
Dockerfile:
FROM sickcodes/docker-osx:naked RUN apt-get update && apt-get install -y xvfb && rm -rf /var/lib/apt/lists/*
- 构建镜像:
docker build -t custom-docker-osx:naked .
- 使用自定义镜像启动:
docker run -it \ --device /dev/kvm \ -p 50922:10022 \ -v "${PWD}/mac_hdd_ng.img:/image" \ custom-docker-osx:naked
方法3:启动时临时安装Xvfb(临时应急方案)
通过docker run的命令参数,先安装Xvfb再启动OS X服务:
docker run -it \ --device /dev/kvm \ -p 50922:10022 \ -v "${PWD}/mac_hdd_ng.img:/image" \ sickcodes/docker-osx:naked \ bash -c "apt-get update && apt-get install -y xvfb && exec /start.sh"
内容的提问来源于stack exchange,提问作者Yang Zhi See
相关产品推荐
相关产品推荐

