Ubuntu18.08环境下Dockerfile位置查找与编辑操作方法
问题背景
使用Docker容器运行依赖OpenCV等图形处理库的程序时,常见报错:ImportError: libGL.so.1: cannot open shared object file: No such file or directory
该问题是容器内缺少对应系统共享依赖导致,需要通过Dockerfile配置固化依赖解决,以下针对Ubuntu 18.04系统下、Docker新手的两个核心疑问给出操作说明。
核心疑问1:Dockerfile在哪里可以找到
- Dockerfile不是Docker安装后自动生成的系统文件,也不是pull下来的公共镜像里自带可直接编辑的文件,它是用户自定义构建镜像时,自行创建的无后缀纯文本配置文件。
- 如果你之前仅通过
docker pull拉取现成公共镜像、从未自己构建过镜像,本地不存在对应镜像的Dockerfile,需要自行新建。 - 如果你是跟着开源项目部署,项目根目录下文件名为
Dockerfile、没有任何后缀名的文件,就是对应的构建配置文件。
核心疑问2:如何编辑修改Dockerfile修复报错
全程在Ubuntu 18.04终端操作即可,步骤如下:
- 新建一个单独的构建工作目录,执行命令进入目录:
mkdir docker_build && cd docker_build - 在当前目录下新建无后缀的
Dockerfile文件,用nano编辑器(新手友好,不用记复杂快捷键)打开编辑:nano Dockerfile - 按以下格式写配置内容,第一行替换成你之前一直在用的基础镜像名即可,比如你之前用的是python3.9镜像就写
FROM python:3.9:# 替换为你实际使用的基础镜像 FROM 你原来用的镜像名:标签 # 安装缺失的libGL依赖,Ubuntu/Debian系基础镜像通用 RUN apt-get update && apt-get install -y libgl1-mesa-glx libglib2.0-0 # 清理安装缓存减小镜像体积 RUN apt-get clean && rm -rf /var/lib/apt/lists/* # 后续可以接你原本需要的配置,比如安装python依赖、复制项目代码、配置启动命令等 - 按
Ctrl+O保存,回车确认文件名,再按Ctrl+X退出编辑器。 - 在当前Dockerfile所在目录下执行构建命令,生成带依赖的自定义镜像,注意命令最后有个
.不能漏:docker build -t my_fixed_image . - 构建完成后,用新生成的
my_fixed_image镜像创建容器运行程序,就不会再触发libGL相关的导入报错。
注意:不要直接进入正在运行的容器执行apt安装依赖,容器被删除后所有内部修改都会丢失,只有写在Dockerfile里的配置会永久固化到镜像中,后续基于该镜像创建的所有容器都自带对应依赖。
内容的提问来源于stack exchange,提问作者Life is full of Learning
相关产品推荐
相关产品推荐

