如何在Docker dev容器中保存git修改过的文件

3vpjnl9f  于 2023-01-24  发布在  Git
关注(0)|答案(2)|浏览(160)

我正在使用VSCode中的远程容器扩展来处理我的docker容器。虽然我可以远程连接到我的客户端容器,但git历史记录显示大部分文件都被修改或删除了。我该如何保持git与我的本地项目结构同步?
我的本地设置如下所示,

- app
   - client
      - .devcontainer
      - Dockerfile
   - server
      - .devcontainer
      - Dockerfile
   - docker-compose.yml

我的docker-compose.yml

version: '3'
services:
  server:
    build: ./server
    volumes:
      - ~/.ssh:/root/.ssh
      - ./server/src:/app/src
      - api-modules:/app/node_modules
  client:
    build: ./client
    depends_on:
      - server
    volumes:
      - ~/.ssh:/root/.ssh
      - ./.git:/app/.git
      - web-modules:/app/node_modules
      - ./client/src:/app/src
      - ./client/public:/app/public
volumes:
  api-modules:
  web-modules:

客户端停靠文件

FROM node:10

COPY . /app/

WORKDIR /app

ENTRYPOINT yarn start;
gz5pxeao

gz5pxeao1#

我想想,现在...

  • ...您在容器创建期间将/app复制到容器中(使用相同路径)。
  • ...您将./.git作为装载到/app/.git

这意味着/app处于上次创建容器时本地目录所处的状态。
/app/.git反映的是您当前的本地状态(因为它是从您的本地./.git读取的已挂载卷)。
这就是为什么容器中的git会看到工作目录的不同,因为它的内容没有处于git期望的状态(基于存储在.git中的git历史/状态)。
解决方案:
无论何时更改代码(以更新/app/),都可以从docker-compose.yml中删除/app/.git卷并重新创建容器。
或者将./作为卷挂载到容器中的/app/(而不仅仅是subdir. git),* 而不是 * 在Docker文件中复制/app

kmpatx3s

kmpatx3s2#

在docker-compose文件中,您可以创建卷client_path并将其装载到/app
示例:

client:
    volumes:
    - <client_path>:/app

相关问题