You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将JHipster容器修改提交至Docker镜像失败问题求助

解决方法:正确保存JHipster容器修改为镜像

一、先排查问题根源

你遇到的问题大概率是以下两个原因之一:

  1. 卷挂载导致修改未存在于容器可写层:如果你运行原镜像时用了-v参数将宿主机目录挂载到/home/jhipster/app,你的修改其实存在宿主机而非容器内部,docker commit只会保存容器自身的可写层变更,不会包含卷内容。
  2. 官方镜像启动时重置目录:JHipster官方镜像可能自带启动脚本,每次容器启动时会从预设模板目录复制内容到/home/jhipster/app,覆盖你之前的修改。

二、临时解决方案:用docker commit正确保存修改

如果只是临时保存修改,按照以下步骤操作:

  1. 重新运行容器,不挂载外部卷:
    运行命令时不要加-v相关参数,确保/home/jhipster/app是容器内部的目录:
    docker run -it --name jhipster-temp jhipster/jhipster bash
    
  2. 在容器内完成修改:
    进入容器后执行你的操作,比如运行./mvnw、修改代码等,确认修改后的内容在/home/jhipster/app下正常存在。
  3. 提交修改为新镜像:
    打开新终端,先查看容器ID:
    docker ps -a
    
    然后提交:
    docker commit jhipster-temp jhipster-image-template
    
  4. 测试新镜像:
    运行新镜像时同样不要挂载卷,验证修改是否保留:
    docker run -it jhipster-image-template bash
    
    此时查看/home/jhipster/app应该能看到你的修改。

三、推荐方案:用Dockerfile构建可维护镜像

docker commit的方式不透明,无法追溯修改内容,推荐用Dockerfile来构建镜像,步骤如下:

  1. 创建Dockerfile文件:
    在本地目录新建Dockerfile,内容示例:
    # 基于官方JHipster镜像
    FROM jhipster/jhipster:latest
    
    # 设置工作目录
    WORKDIR /home/jhipster/app
    
    # 执行你需要的修改操作,比如运行mvn构建
    RUN ./mvnw clean install -DskipTests
    
    # 如果是本地有修改的源代码,可复制到容器内(假设本地代码在./app子目录)
    # COPY ./app /home/jhipster/app
    
    # 覆盖默认启动行为(如果官方启动脚本会重置目录)
    CMD ["bash"]
    
  2. 构建镜像:
    在Dockerfile所在目录执行:
    docker build -t jhipster-image-template .
    
  3. 运行测试:
    docker run -it jhipster-image-template bash
    
    此时你的修改会被固化在镜像中,每次启动都能保留。

四、额外注意事项

  • 如果官方镜像的启动脚本确实会重置/home/jhipster/app,你需要在Dockerfile中修改或替换这个脚本。可以先进入原容器查看启动脚本位置(通常在/entrypoint.sh或类似路径),然后在Dockerfile中覆盖它:
    # 复制自定义的启动脚本到容器
    COPY ./my-entrypoint.sh /entrypoint.sh
    RUN chmod +x /entrypoint.sh
    ENTRYPOINT ["/entrypoint.sh"]
    
  • 尽量避免用docker commit做长期镜像维护,Dockerfile更利于版本控制和团队协作。

内容的提问来源于stack exchange,提问作者Amir Choubani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:56:26