如何提交Docker镜像内的修改,解决容器开发时Git无法直接提交的问题
问题定性
该情况属于预期表现,核心原因如下:
- 你当前使用Docker命名卷
actions挂载actions服务的/app目录,该卷由Docker独立管理,存储位置不在你的本地项目目录内,无法同步宿主机项目根目录下的.git文件 - 镜像构建过程默认不会将外层项目的
.git目录打包进镜像,因此容器内本身不存在Git仓库信息,自然无法直接提交代码。
优化方案
方案一:本地目录绑定挂载(改动最小,最常用)
直接修改docker-compose.yml中actions服务的挂载配置,将原有命名卷替换为本地目录绑定挂载,实现代码双向实时同步:
# docker-compose.yml 改动部分 services: actions: # 其他原有配置保持不变 volumes: # 替换原有的 actions:/./app 行 - ./action-handlers:/app # 可选:添加该行避免容器内node_modules覆盖宿主机的node_modules,解决跨系统依赖兼容性问题 - /app/node_modules # 删掉顶层volumes中的 actions: 声明,该命名卷不再需要 volumes: db_data: # 移除 actions: 这一行
修改后重启服务生效:
- 停止原有服务:
docker-compose down - 重启服务:
docker-compose up -d --build actions
配置生效后,容器内对/app目录的所有修改会实时同步到宿主机的my-project/action-handlers目录,你直接在宿主机的项目目录操作Git提交即可,无需手动复制代码,原有的热更新能力也不受影响。
方案二:配置Dev Containers实现容器内直接提交Git
如果你希望完全在容器内完成开发+Git提交操作,可以添加VSCode Dev Containers配置,将整个项目目录挂载到容器内:
- 在项目根目录创建
.devcontainer/devcontainer.json,参考配置如下:
{ "name": "Hasura Action开发环境", "dockerComposeFile": "../docker-compose.yml", "service": "actions", "workspaceFolder": "/workspace/action-handlers", "mounts": [ // 挂载整个本地项目到容器内,包含.git目录 "source=${localWorkspaceFolder},target=/workspace,type=bind", // 可选:共享宿主机的Git配置,无需在容器内重复设置用户名、凭证 "source=${localEnv:HOME}/.gitconfig,target=/root/.gitconfig,type=bind,readonly" ] }
- 重启容器后通过VSCode Remote-Containers打开项目,即可在容器终端直接执行Git命令提交修改。
内容的提问来源于stack exchange,提问作者Charklewis
相关产品推荐
相关产品推荐

