Home Explore Blog CI



docker

6th chunk of `content/guides/nodejs/develop.md`
df75b4358c95d683d924ab402640d0bf993c673af3277d4c0000000100000bb7
file. Open your `compose.yaml` file in an IDE or text editor, and then add the
`target: dev` instruction to target the `dev` stage from your multi-stage
Dockerfile.

Also, add a new volume to the server service for the bind mount. For this application, you'll mount `./src` from your local machine to `/usr/src/app/src` in the container.

Lastly, publish port `9229` for debugging.

The following is the updated Compose file. All comments have been removed.

```yaml {hl_lines=[5,8,20,21],collapse=true,title=compose.yaml}
services:
  server:
    build:
      context: .
      target: dev
    ports:
      - 3000:3000
      - 9229:9229
    environment:
      NODE_ENV: production
      POSTGRES_HOST: db
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD_FILE: /run/secrets/db-password
      POSTGRES_DB: example
    depends_on:
      db:
        condition: service_healthy
    secrets:
      - db-password
    volumes:
      - ./src:/usr/src/app/src
  db:
    image: postgres
    restart: always
    user: postgres
    secrets:
      - db-password
    volumes:
      - db-data:/var/lib/postgresql/data
    environment:
      - POSTGRES_DB=example
      - POSTGRES_PASSWORD_FILE=/run/secrets/db-password
    expose:
      - 5432
    healthcheck:
      test: ["CMD", "pg_isready"]
      interval: 10s
      timeout: 5s
      retries: 5
volumes:
  db-data:
secrets:
  db-password:
    file: db/password.txt
```

### Run your development container and debug your application

Run the following command to run your application with the new changes to the `Dockerfile` and `compose.yaml` file.

```console
$ docker compose up --build
```

Open a browser and verify that the application is running at [http://localhost:3000](http://localhost:3000).

Any changes to the application's source files on your local machine will now be
immediately reflected in the running container.

Open `docker-nodejs-sample/src/static/js/app.js` in an IDE or text editor and update the button text on line 109 from `Add Item` to `Add`.

```diff
+                         {submitting ? 'Adding...' : 'Add'}
-                         {submitting ? 'Adding...' : 'Add Item'}
```

Refresh [http://localhost:3000](http://localhost:3000) in your browser and verify that the updated text appears.

You can now connect an inspector client to your application for debugging. For
more details about inspector clients, see the [Node.js
documentation](https://nodejs.org/en/docs/guides/debugging-getting-started).

## Summary

In this section, you took a look at setting up your Compose file to add a mock
database and persist data. You also learned how to create a multi-stage
Dockerfile and set up a bind mount for development.

Related information:

- [Volumes top-level element](/reference/compose-file/volumes/)
- [Services top-level element](/reference/compose-file/services/)
- [Multi-stage builds](/manuals/build/building/multi-stage.md)

## Next steps

In the next section, you'll learn how to run unit tests using Docker.

Title: Running the Development Container and Debugging the Application
Summary
The section describes how to run the application with the updated Dockerfile and compose.yaml file. It explains how to verify that the application is running in a browser and confirms that changes to the source files on the local machine are immediately reflected in the running container. It also provides instructions on how to connect an inspector client for debugging. The section summarizes the steps taken to set up the Compose file, add a mock database, persist data, create a multi-stage Dockerfile, and set up a bind mount for development. It also links to related information and introduces the next step of running unit tests using Docker.