I am using remote container extension in VSCode to work with my docker containers. While I am able to make a remote connection to my client container for example, the git history is showing most of the files as modified or deleted. How do I go about keeping git in-sync with my local project structure?
My local setup looks as the following,
- app
- client
- .devcontainer
- Dockerfile
- server
- .devcontainer
- Dockerfile
- docker-compose.yml
My 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:
Client Dockerfile
FROM node:10
COPY . /app/
WORKDIR /app
ENTRYPOINT yarn start;
2
Answers
Let’s see, currently…
/app
into the container (with same path) during container creation../.git
as volume into/app/.git
That means
/app
is at the state your local directory was in when the container was created the last time.While
/app/.git
is reflecting your current local state (because it’s a mounted volume reading from your local./.git
).That’s why
git
in the container will see working directory differences as its contents are not in the stategit
expects them to be (based on git’s history/state stored in.git
).Solutions:
Either remove the
/app/.git
-volume fromdocker-compose.yml
and re-create the container whenever you changed the code (to update/app/
).Or mount
./
as volume to/app/
in the container (not just the subdir .git), instead of copying/app
in the Dockerfile.In you docker-compose file you can create and mount the volume client_path to /app
example: