无容器内OS仓库访问权限时如何运行带GUI的Docker镜像
基础概念错误修正
FROM指令的作用是声明当前镜像的父镜像,必须填写具体的镜像名(比如centos、firefox),不能只填镜像仓库地址docker.ioRUN指令是在镜像构建过程中,在父镜像的容器环境内执行命令,用于修改镜像的文件系统(比如安装软件、写配置),不能在RUN里执行docker run这类主机上的Docker命令,镜像构建阶段无法访问主机的Docker daemon,也不允许嵌套启动容器- 你能直接获取到现成Firefox镜像的场景下,完全不需要额外写Dockerfile重新构建,直接使用已有镜像启动容器即可
解决方案
你只要把之前运行自定义镜像的命令里的镜像名,替换成你能获取到的Firefox镜像名即可,不需要做多余的构建操作:
docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" 你获取到的Firefox镜像名:标签
举个实际示例,如果你拿到的是官方Firefox镜像,标签为latest,命令就是:
docker run -it --net=host --env="DISPLAY" --volume="$HOME/.Xauthority:/root/.Xauthority:rw" firefox:latest
如果有特殊需求必须基于这个Firefox镜像做自定义调整(比如加插件、改默认配置),才需要写Dockerfile,写法是直接用Firefox镜像作为基础镜像,在上面叠加你的自定义操作即可:
# 直接用你能拿到的Firefox镜像作为父镜像,不需要自己再安装Firefox FROM 你获取到的Firefox镜像名:标签 # 下方添加你的自定义命令,比如拷贝本地配置文件到容器内 COPY my-firefox-config /root/.mozilla/firefox # 父镜像已经默认声明了启动Firefox的CMD,不需要重复编写,要修改的话可以自行覆盖
构建命令和常规用法一致:
docker build -t my-custom-firefox .
运行时还是用上述的GUI容器启动参数,替换成自定义的镜像名即可。
内容的提问来源于stack exchange,提问作者codeMonkey
相关产品推荐
相关产品推荐

