skip to Main Content

I am new to Docker and buidling a docker-compose file to setup my nodejs dev environment from a single file. Idea is to give a docker-compose file to a developer from where they can simply spin up the containers and start development.

When I docker-compose up, the application is built and runs with success. But my problem is when I open it in dev containers in Vscode, it fails to recognize as a git repo.

.dockerignore

node_modules
npm-debug.log

Dockerfile

FROM node:16.15.0 as develop-stage
WORKDIR /code
COPY package.json .
# Using package-lock file to fix the version of installed modules.
COPY package-lock.json .
RUN npm install
COPY . .
EXPOSE 9608
CMD ['nodemon' 'index.js']

Docker-compose

version: '3.8'
services:
  my-service:
    container_name: my-service
    build: 
      context: 'https://username:[email protected]/abc/test-repo'
      dockerfile: Dockerfile
    volumes:
      - my-data:/code
    command: nodemon index.js
    networks:
      - my-network
    expose:
      - 9608
    ports:
      - 9608:9608
    restart: on-failure
volumes:
  my-data:
    external: false
networks:
  my-network:
    external: false

2

Answers


  1. Your .git folder is not within the root directory that’s being copied over to the docker image. Depending on how your folder structure is set up it may be a folder or 2 above. You can find it by cd .. && ls -a until found. Then use an explicit COPY ../.git . to add it into the Docker image.

    Login or Signup to reply.
  2. A docker-compose context defines a build context, which can use a Git repository URL

    When the URL parameter points to the location of a Git repository, the repository acts as the build context.
    The builder recursively pulls the repository and its submodules. A shallow clone is performed and therefore pulls down just the latest commits, not the entire history.

    A repository is first pulled into a temporary directory on your host. After that succeeds, the directory is sent to the daemon as the context.

    In other words, your context represent the content of the remote Git repository, it does not represent an actual (cloned) Git repository.

    • The context is the set of files that are sent to the docker daemon for building an image.
    • The source of the context can be a local directory or a git URL.

    If you had to get a repository inside your image, your Dockerfile/docker-compose would clone the Git repository, not use a context.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search