Docker中升级code-server基础镜像时如何保留附加应用?
解决code-server镜像升级时保留自定义程序的方案
针对你升级code-server镜像时需要重复安装JVM、Python包等问题,给你几个可行的解决办法:
1. 基于官方镜像构建自定义镜像(推荐长期使用)
这是最规范的方式,把所有需要的依赖和工具都写入Dockerfile,每次官方镜像更新后,重新构建自己的镜像即可。
- 编写
Dockerfile:FROM linuxserver/code-server:latest # 安装JVM(以OpenJDK 17为例) RUN apt update && apt install -y --no-install-recommends openjdk-17-jdk && rm -rf /var/lib/apt/lists/* # 安装Python依赖(提前把需要的包列在requirements.txt里) COPY requirements.txt /tmp/ RUN pip install --no-cache-dir -r /tmp/requirements.txt # 添加其他自定义工具的安装命令,比如maven、gradle等 - 每次官方镜像更新后,重新构建你的镜像:
docker build -t my-custom-code-server . - 用这个自定义镜像启动容器,升级时只需要重新构建,所有依赖都会保留。
2. 将程序安装目录挂载到宿主机卷
把JVM、Python包等的安装路径挂载到宿主机,这样容器升级时,数据存在宿主机不会丢失。
- 先在现有容器内找到对应路径:
- JVM路径:执行
which java,通常是/usr/lib/jvm/java-17-openjdk-amd64这类路径 - Python包路径:执行
pip show pip查看Location字段,比如/usr/local/lib/python3.10/site-packages
- JVM路径:执行
- 启动容器时添加挂载参数(替换成你自己的宿主机路径):
docker run -d \ -v /your/host/path/jvm:/usr/lib/jvm/java-17-openjdk-amd64 \ -v /your/host/path/python-packages:/usr/local/lib/python3.10/site-packages \ # 其他原有启动参数 linuxserver/code-server:latest - 注意:要确保宿主机挂载目录的权限和容器内一致,避免出现权限报错。
3. Docker commit保存容器为镜像(临时应急方案)
如果不想写Dockerfile,可以直接把当前配置好的容器提交为新镜像,升级时基于这个镜像使用。
- 停止当前容器:
docker stop code-server - 提交容器为自定义镜像:
docker commit code-server my-code-server:current - 之后用这个自定义镜像启动容器,下次升级时可以重复这个步骤。
- 缺点:镜像会越来越臃肿,且无法追踪具体做了哪些修改,不推荐长期使用。
内容的提问来源于stack exchange,提问作者RAY
相关产品推荐
相关产品推荐

